向WooCommerce产品变体添加后缀将被覆盖

时间:2019-03-13 18:54:56

标签: php wordpress woocommerce custom-taxonomy variations

我开始期望WooCommerce内置一些“更新功能”,仅允许我重命名变体post_title一小段时间。然后,它又回到了钩子/ WooCommerce决定了什么?

我想以编程方式将诸如“(已取消)”之类的后缀添加到特定版本中。

$new_title = get_the_title( $variationid ) . ' (Cancelled)';
wp_update_post(array('ID' =>$variationid, 'post_title' => $new_title));

这只“挂了”一会儿...

我尝试禁用此钩子,然后更改标题,但仍然被覆盖。

add_filter( 'woocommerce_product_variation_title_include_attributes', '__return_false' );

有什么方法可以使WooCommerce停止覆盖变体标题?

我的解决方案基于@LoicTheAztec的答案,并使用基于我的自定义帖子状态“已取消”的逻辑。

add_filter( 'woocommerce_product_variation_title', 'filter_product_variation_title_callback', 10, 4 );
function filter_product_variation_title_callback( $variation_title, $product, $title_base, $title_suffix ) {

    $id = $product->get_id();
    $status = get_post_status($id);
    if ($status == 'cancelled'){
        return $variation_title . ' (' . __("Cancelled", "woocommerce") . ')';
    } else {
        return $variation_title;
    }
}

2 个答案:

答案 0 :(得分:3)

您应尝试使用专用的woocommerce_product_variation_title过滤器挂钩,该挂钩可临时(有条件地)更改产品变体标题

add_filter( 'woocommerce_product_variation_title', 'filter_product_variation_title_callback', 10, 4 );
function filter_product_variation_title_callback( $variation_title, $product, $title_base, $title_suffix ) {
    // Conditional custom field (example)
    if( $product->get_meta('_is_cancelled')  )
        $title_base .= ' (' . __("cancelled", "woocommerce") . ')';

    return $title_base
}

代码进入您的活动子主题(或活动主题)的function.php文件中。应该可以。

  

注意: $variation_title返回包含产品属性的产品标题,该标题在上面的功能代码中已禁用...


在订单编辑页面上(它也会反映出来)

enter image description here

答案 1 :(得分:0)

WooCommerce中的代码部分及其过滤器。

        $should_include_attributes = apply_filters( 'woocommerce_product_variation_title_include_attributes', $should_include_attributes, $product );
        $separator                 = apply_filters( 'woocommerce_product_variation_title_attributes_separator', ' - ', $product );
        $title_base                = get_post_field( 'post_title', $product->get_parent_id() );
        $title_suffix              = $should_include_attributes ? wc_get_formatted_variation( $product, true, false ) : '';

        return apply_filters( 'woocommerce_product_variation_title', $title_suffix ? $title_base . $separator . $title_suffix : $title_base, $product, $title_base, $title_suffix );




add_filter('woocommerce_product_variation_title', 'change_variation_title_temporary');

function change_variation_title_temporary($variation_title, $product, $title_base, $title_suffix) {

    return $title_base .  ' (Cancelled)';

}