在WooCommerce中将自定义字段显示为外部链接

问题描述

我有在单个产品页面和WooCommerce存档页面上显示自定义字段代码

// Backend: Add Designer Fields
add_action( 'woocommerce_product_options_general_product_data','add_designer_fields' );
function add_designer_fields() {

// Designer Name Field
woocommerce_wp_text_input( array(
    'id' => '_designer_name','label' => __( 'Designer Name','woocommerce' ),));

// Designer URL Field
woocommerce_wp_text_input( array(
    'id' => '_designer_url','label' => __( 'Designer URL',));

}

// Backend: Save Designer Fields
add_action( 'woocommerce_admin_process_product_object','save_designer_fields' );
function save_designer_fields( $product ) {

// Save Designer Name Field
if( isset( $_POST['_designer_name'] ) ) {
    $product->update_Meta_data( '_designer_name',sanitize_text_field( $_POST['_designer_name'] ) );
}

// Save Designer URL Field
if( isset( $_POST['_designer_url'] ) ) {
    $product->update_Meta_data( '_designer_url',sanitize_text_field( $_POST['_designer_url'] ) );
}

}

// display Designer Fields on single product pages and on archive pages
add_action('woocommerce_before_add_to_cart_form','display_designer_fields_value',5 );
add_action('woocommerce_after_shop_loop_item',0 );
function display_designer_fields_value() {
global $product;

if( $designer_name = $product->get_Meta('_designer_name') )
    echo  '<span id="value-on-single-product" class="custom-field">' . __("","woocommerce") . $designer_name . '</span>';

if( $designer_url = $product->get_Meta('_designer_url') )
    echo  '<span id="value-on-single-product" class="custom-field">' . __("","woocommerce") . $designer_url . '</span>';

}

这些字段正常工作。但是我需要名称字段作为页面上的链接

例如:添加产品时,经理输入设计师的姓名和指向其网站的链接

在单个产品页面存档页面上,设计师的姓名显示链接。当您单击它时,您需要转到设计者的网站。

您能告诉我该怎么做吗?我找不到正确的代码

解决方法

您可以为此使用以下内容:

这些条件确保始终显示文本(如果不为空),如果设计者url字段不为空,则第二个条件使其成为可单击的链接,否则将仅显示设计者名称。

HTML <a>目标属性

  • _blank在新窗口或新标签页中打开链接的文档
  • _self在与单击相同的框架中打开链接的文档(默认设置)
  • _parent在父框架中打开链接的文档
  • _top在窗口的整个正文中打开链接的文档
function display_designer_fields_value() {
    global $product;
    
    // Is a WC product
    if ( is_a( $product,'WC_Product' ) ) {  
        // Get meta
        $designer_name = $product->get_meta( '_designer_name' );
        $designer_url = $product->get_meta( '_designer_url' );

        // NOT empty
        if ( ! empty( $designer_name ) ) {
            $output = '<span id="value-on-single-product" class="custom-field">';

            // NOT empty
            if ( ! empty ( $designer_url ) ) {
                $output .= '<a href="' . $designer_url . '" target="_blank">' . $designer_name . '</a></span>';
            } else  {
                $output .= $designer_name . '</span>';
            }
            
            echo $output;
        }
    }
}
add_action( 'woocommerce_before_add_to_cart_form','display_designer_fields_value' );
add_action( 'woocommerce_after_shop_loop_item','display_designer_fields_value' );