首页 > 解决方案 > 如何以编程方式在 woocommerce 中随处更改产品名称?

问题描述

我正在尝试美化我的产品名称,我需要在任何地方应用更改(目录、购物车、结帐、小部件......)等

实际上,我设法:

目录(循环)单品:

add_filter('the_title', 'new_title', 10, 2);
function new_title($title, $id) {
    if('product' == get_post_type($id)){
        $title = rename_woo_product($title, $id); // My function to rename
    }
    return $title;
}

在产品标题标签和 yoast 中:

add_filter( 'pre_get_document_title', 'generate_custom_title', 10 );
add_filter('wpseo_title', 'generate_custom_title', 15);
function generate_custom_title($title) {
    if(  is_singular( 'product') ) {
        $title = get_the_title();
    }
    return $title;
}

购物车和结帐:

add_filter( 'woocommerce_cart_item_name', 'custom_variation_item_name', 10, 3 );
function custom_variation_item_name( $item_name,  $cart_item,  $cart_item_key ){
    $product_item = $cart_item['data'];

    $item_name = get_the_title( $cart_item['product_id'] );

    if(!empty($product_item) && $product_item->is_type( 'variation' ) ) {
        $item_name = $item_name . '<br>' . $cart_item['data']->attribute_summary;
    }

    if(is_cart()){
        $item_name = sprintf( '<a href="%s">%s</a>', esc_url( $cart_item['data']->get_permalink() ), $item_name );
    }

    return $item_name;
}

我不知道这是否是最好的方法,但它适用于此。但是例如我使用 woocommerce 的最近查看的产品小部件,并且产品标题没有更新.. Yith Wishlist 也是如此

有没有更好的方法来更新产品名称并将其应用到任何地方?

标签: phpwordpresswoocommerce

解决方案


您也可以使用复合钩子woocommerce_product_get_name,例如:

add_filter('woocommerce_product_get_name', 'filter_wc_product_get_name', 10, 2); // For "product" post type
add_filter('woocommerce_product_variation_get_name', 'filter_wc_product_get_name', 10, 2); // For "product_variation" post type
function filter_wc_product_get_name( $name, $product ){
    if ( ! is_admin() ) {
        $name = rename_woo_product($name, $product->get_id());
    }
    return $name;  
}

它应该替换您在woocommerce_cart_item_name过滤器挂钩中挂钩的自定义函数。


推荐阅读