And*_*way 7 php wordpress product woocommerce hook-wordpress
作为WooCommerce网站的一部分,我希望有一个销售页面,列出销售项目(分页和过滤).我认为最好的办法是将"促销"类别自动添加到销售中的任何帖子中(因为类别页面允许自动过滤和分页).
到目前为止,我有这个代码,以便在保存时以编程方式将销售类别添加到产品中:
function update_test( $product) {
wp_set_object_terms($product, 'sale', 'product_cat', true );
}
add_action( 'save_post', 'update_test', 1, 2);`
Run Code Online (Sandbox Code Playgroud)
但是,我只希望在产品开始销售时(即设置了销售价格)发生这种情况,以便保存非销售的帖子不会增加销售类别.我尝试过几种不同的东西,但没有运气.我试过这个,但它没有用:
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);`
Run Code Online (Sandbox Code Playgroud)
但这只是让我的网站冻结保存.
有任何想法吗?
安迪
更新 2 (2018 年 10 月)
save_post
是一个 WordPress 钩子,可以处理$post_id
参数并针对所有类型的帖子。您需要首先在条件(和)中定位product
自定义 WooCommerce 。post_type
publish
post_status
此外,由于它不是 post 对象,因此您不能is_on_sale()
对其使用方法。但您可以使用get_post_meta()
函数来检查产品中是否设置了销售价格。
这是功能齐全且经过测试的代码(仅适用于简单产品):
add_action( 'save_post_product', 'update_product_set_sale_cat' );
function update_product_set_sale_cat( $post_id ) {
if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) {
return $post_id;
}
if ( ! current_user_can( 'edit_product', $post_id ) ) {
return $post_id;
}
if( get_post_status( $post_id ) == 'publish' && isset($_POST['_sale_price']) ) {
$sale_price = $_POST['_sale_price'];
if( $sale_price >= 0 && ! has_term( 'Sale', 'product_cat', $post_id ) ){
wp_set_object_terms($post_id, 'sale', 'product_cat', true );
}
}
}
Run Code Online (Sandbox Code Playgroud)
代码位于活动子主题(或活动主题)的 function.php 文件中。经过测试并有效。
相关:从 Woocommerce 中的非促销产品中自动删除促销产品类别
归档时间: |
|
查看次数: |
2272 次 |
最近记录: |