在 WooCommerce 中将自定义字段显示为外部 link
Show custom field as external link in 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', 'woocommerce' ),
));
}
// 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', 'display_designer_fields_value', 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>';
}
- 第一个字段显示姓名
- 第二个外部 link.
这些字段工作正常。但我需要名称字段在页面上是 link。
例如:添加产品时,经理在他的网站上输入设计师的姓名和link。
在单品页和存档页,设计师的名字显示为一个link。点开后需要跳转到设计师的网站
你能告诉我怎么做吗?我找不到正确的代码。
您可以使用以下方法:
条件确保文本始终显示(如果不为空),第二个条件使其可点击 link 如果设计师 url 字段不为空,否则只是设计师姓名将显示。
HTML <a>
目标属性
_blank
在新的 window 或选项卡中打开 linked 文档
_self
在单击时在同一框架中打开 linked 文档(这是默认设置)
_parent
在父框架 中打开 linked 文档
_top
在 window 的完整正文中打开 linked 文档
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' );
我有在单个产品页面和 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', 'woocommerce' ),
));
}
// 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', 'display_designer_fields_value', 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>';
}
- 第一个字段显示姓名
- 第二个外部 link.
这些字段工作正常。但我需要名称字段在页面上是 link。
例如:添加产品时,经理在他的网站上输入设计师的姓名和link。
在单品页和存档页,设计师的名字显示为一个link。点开后需要跳转到设计师的网站
你能告诉我怎么做吗?我找不到正确的代码。
您可以使用以下方法:
条件确保文本始终显示(如果不为空),第二个条件使其可点击 link 如果设计师 url 字段不为空,否则只是设计师姓名将显示。
HTML <a>
目标属性
_blank
在新的 window 或选项卡中打开 linked 文档_self
在单击时在同一框架中打开 linked 文档(这是默认设置)_parent
在父框架 中打开 linked 文档
_top
在 window 的完整正文中打开 linked 文档
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' );