为 Shop/Category 页面使用不同的产品标题
Use Different Product Title For Shop/Category Pages
我正在寻找一种在不影响单个产品页面标题的情况下为商店页面使用不同产品标题的解决方案。
这是我想要实现的示例
https://www.slickwraps.com/devices/phones/ios/iphone-xs-max.html
你可以在上面看到 Link 商店页面上的产品标题不同,我知道这个网站是用不同的 CMS 构建的,但是我们可以在 Woocommerce 中实现类似的结果吗?
这是您可以执行的操作。将以下代码添加到主题 functions.php 文件中。该代码将在 Product data -> General options 下添加自定义标题选项。如果admin中没有添加自定义标题,会显示默认标题。
在back-end
中添加自定义字段
// Display the custom text field
function mos_create_custom_field() {
$args = array(
'id' => 'shop_page_field_title',
'label' => __( 'Shop Page product title' ),
'class' => 'mos-custom-field',
'desc_tip' => true,
'description' => __( 'Shop Page product title.', 'ctwc' ),
);
woocommerce_wp_text_input( $args );
}
add_action( 'woocommerce_product_options_general_product_data', 'mos_create_custom_field' );
add_action( 'woocommerce_product_options_inventory_product_data', 'mos_create_custom_field' );
正在保存自定义字段值
// Save the custom field
function mos_save_custom_field( $post_id ) {
$product = wc_get_product( $post_id );
$title = isset( $_POST['shop_page_field_title'] ) ? $_POST['shop_page_field_title'] : '';
$product->update_meta_data( 'shop_page_field_title', sanitize_text_field( $title ) );
$product->save();
}
add_action( 'woocommerce_process_product_meta', 'mos_save_custom_field' );
显示在商店页面上
// remove the default action for product title on shop page
remove_action( 'woocommerce_shop_loop_item_title', 'woocommerce_template_loop_product_title' );
// add the custom action to show the custom product title
add_action( 'woocommerce_shop_loop_item_title', 'custom_woocommerce_template_loop_product_title', 99 );
function custom_woocommerce_template_loop_product_title() {
global $post;
$product = wc_get_product( $post->ID );
$title = $product->get_meta( 'shop_page_field_title' );
if( $title ) {
// Only display our field if we've got a value for the field title
echo '<h2 class="woocommerce-loop-product__title">' . esc_html( $title ) . '</h2>';
} else {
// else display the defaul title
echo '<h2 class="woocommerce-loop-product__title">' . esc_html( $product->get_title() ) . '</h2>';
}
}
代码已经过测试并且工作正常。希望对你有帮助
我正在寻找一种在不影响单个产品页面标题的情况下为商店页面使用不同产品标题的解决方案。 这是我想要实现的示例 https://www.slickwraps.com/devices/phones/ios/iphone-xs-max.html 你可以在上面看到 Link 商店页面上的产品标题不同,我知道这个网站是用不同的 CMS 构建的,但是我们可以在 Woocommerce 中实现类似的结果吗?
这是您可以执行的操作。将以下代码添加到主题 functions.php 文件中。该代码将在 Product data -> General options 下添加自定义标题选项。如果admin中没有添加自定义标题,会显示默认标题。
在back-end
中添加自定义字段 // Display the custom text field
function mos_create_custom_field() {
$args = array(
'id' => 'shop_page_field_title',
'label' => __( 'Shop Page product title' ),
'class' => 'mos-custom-field',
'desc_tip' => true,
'description' => __( 'Shop Page product title.', 'ctwc' ),
);
woocommerce_wp_text_input( $args );
}
add_action( 'woocommerce_product_options_general_product_data', 'mos_create_custom_field' );
add_action( 'woocommerce_product_options_inventory_product_data', 'mos_create_custom_field' );
正在保存自定义字段值
// Save the custom field
function mos_save_custom_field( $post_id ) {
$product = wc_get_product( $post_id );
$title = isset( $_POST['shop_page_field_title'] ) ? $_POST['shop_page_field_title'] : '';
$product->update_meta_data( 'shop_page_field_title', sanitize_text_field( $title ) );
$product->save();
}
add_action( 'woocommerce_process_product_meta', 'mos_save_custom_field' );
显示在商店页面上
// remove the default action for product title on shop page
remove_action( 'woocommerce_shop_loop_item_title', 'woocommerce_template_loop_product_title' );
// add the custom action to show the custom product title
add_action( 'woocommerce_shop_loop_item_title', 'custom_woocommerce_template_loop_product_title', 99 );
function custom_woocommerce_template_loop_product_title() {
global $post;
$product = wc_get_product( $post->ID );
$title = $product->get_meta( 'shop_page_field_title' );
if( $title ) {
// Only display our field if we've got a value for the field title
echo '<h2 class="woocommerce-loop-product__title">' . esc_html( $title ) . '</h2>';
} else {
// else display the defaul title
echo '<h2 class="woocommerce-loop-product__title">' . esc_html( $product->get_title() ) . '</h2>';
}
}
代码已经过测试并且工作正常。希望对你有帮助