php - 如果价格在 Woocommerce 3 中更新,则更改产品状态
问题描述
我需要在挂钩中更改产品 post_status。每次供应商更改价格时,我都试图让产品回到“待定”状态。
add_action( 'updated_post_meta', 'mp_sync_on_product_save', 10, 4 );
function mp_sync_on_product_save( $meta_id, $post_id, $meta_key, $meta_value ) {
if ( $meta_key == '_price' ) { // edited price
if ( get_post_type( $post_id ) == 'product' ) {
$product = wc_get_product( $post_id );
$product['post_status'] = 'pending'; //how to update this?
// var_dump($product_id);var_dump($product);die('test');
}
}
}
谁能告诉我什么函数可以做到这一点:“$product['post_status'] ='pending';”?
解决方案
如果“管理员”用户角色以外的任何人在后端更新产品价格,以下代码会将产品状态更改为待处理:
add_action( 'woocommerce_product_object_updated_props', 'change_status_on_product_object_updated_prices', 10, 2 );
function change_status_on_product_object_updated_prices( $product, $updated_props ) {
$changed_props = $product->get_changes();
if ( $product->get_status() !== 'pending' && ( in_array( 'regular_price', $updated_props, true ) ||
in_array( 'sale_price', $updated_props, true ) ) && ! current_user_can( 'administrator' ) )
{
wp_update_post( array( 'ID' => $product->get_id(), 'post_status' => 'pending' ) );
}
}
代码位于您的活动子主题(或活动主题)的 function.php 文件中。测试和工作。
“管理员”用户角色不会受到代码的影响……您还应该检查“供应商用户角色无法更改产品发布状态。
推荐阅读
- javascript - 在 Laravel 中使用 Vue
- python - 检索已打开文件的路径
- html - 当我将窗口调整为小尺寸时,右侧的内容被切断。
- php - 内爆后未使用 strip_tags 和 str_replace 清除文本
- javascript - 如何访问一个对象的属性到一个对象的属性
- reactjs - 如何在 REACT 中返回一个值(真或假)以查看元素是否悬停而不悬停在其上
- java - Java正则表达式从文件中的一行句子中获取特定的字符串
- python - 在 PySpark 中按特定日期分组
- android - 为什么 materialButton 会关闭我的应用程序?
- c++ - 使用不同的索引变量索引数组时的OpenMP for循环?