2016-12-05 104 views
5

作为WooCommerce网站的一部分,我希望有一个销售网页,其中列出销售商品(使用分页和过滤)。我认为最好的办法是创建一个“销售”类别,自动添加到作为销售一部分的任何帖子中(因为类别页面允许自动过滤和分页)。使用“save_post”钩子将销售类别添加到正在销售的产品

我有此代码到目前为止以编程方式增加销售类别产品时,您保存:

function update_test($product) { 
wp_set_object_terms($product, 'sale', 'product_cat', true); 
} 

add_action('save_post', 'update_test', 1, 2);` 

但是,我只希望这种情况发生,如果一个产品有售(即具有销售价格设置),以便节约不在出售的帖子没有添加销售类别我已经尝试了几种不同的东西,但没有运气我试过这个,但它不起作用:

function update_test($product) { 
if($product->is_on_sale()){ 
wp_set_object_terms($product, 'sale', 'product_cat', true); 
} 
} 

add_action('save_post', 'update_test', 1, 2);` 

但这只是让我的网站冻结保存。

任何想法?

安迪

回答

2

- 更新 -

save_post是一个WordPress钩与$post_id论证工作,并针对所有类型的职位。您需要定位product定制WooCommerce post_type第一条件(和publishpost_status)。

此外,因为它不是一个帖子对象,你不能使用is_on_sale()方法。但您可以使用get_post_meta()函数来检查产品中是否设置了销售价格

这里是全功能和测试代码:

function update_product_set_sale_cat($post_id) { 

    // Get the post object 
    $post = get_post($post_id); 
    if($post->post_type == 'product' && $post->post_status == 'publish') { 
     $sale_price = get_post_meta($post_id, '_sale_price', true); 
     if(!empty($sale_price) || $sale_price > 0) 
      wp_set_object_terms($post_id, 'sale', 'product_cat', true); 
    } 
} 
add_action('save_post', 'update_product_set_sale_cat', 1, 2); 

代码放在您的活动子主题(或主题)的function.php文件。或者也可以在任何插件php文件中使用。

+0

感谢您的快速响应。 我在函数文件尝试这个代码,并保存时它给了我下面的错误信息: “调用未定义的方法WP_Post :: is_on_sale()” 我已经尝试了一些东西,得到这个错误回来,不知道如何解决它。 Andy – AndrewIanHalloway

+0

谢谢!这对于简单的产品来说很好。将不得不思考如何使其适用于可变产品。男人,woocommerce不喜欢做任何事情。 – AndrewIanHalloway

+0

你的意思是Woo Commerce正在改变,以便它适用于变化?或者你有可能找到一种方法使它适用于可变产品?无论如何,非常感谢迄今为止的帮助!昨天我一直在拼命敲墙,试图对此进行分类。 – AndrewIanHalloway