【发布时间】:2021-01-05 22:46:21
【问题描述】:
是否有一个钩子可以允许在全球范围内的 woocommerce 中设置库存 > 管理库存复选框?
我所有的产品都是单件数量,所以总是要记得检查它似乎很反 D.R.Y,尤其是对于其他员工。
【问题讨论】:
标签: wordpress woocommerce
是否有一个钩子可以允许在全球范围内的 woocommerce 中设置库存 > 管理库存复选框?
我所有的产品都是单件数量,所以总是要记得检查它似乎很反 D.R.Y,尤其是对于其他员工。
【问题讨论】:
标签: wordpress woocommerce
虽然这相当晚了,因为您询问了一个钩子:虽然似乎没有专门用于打开 Manage Stock 选项的钩子、动作或函数,但您仍然可以挂钩到 post save 功能并以这种方式自动启用它,因为它只是一个 post_meta 值:
add_action('save_post', 'myWoo_savePost', 10, 2);
function myWoo_savePost($postID, $post) {
if (isset($post->post_type) && $post->post_type == 'product') {
update_post_meta($post->ID, '_manage_stock', 'yes');
}
}
请注意,库存水平将始终默认为 0,因此您可能还需要添加以下行:
update_post_meta($post->ID, '_stock', '1');
...这会将您的库存数量更新为 1。但请注意,每次保存产品时都会发生这种情况。
我不确定这是否会在 WooCommerce 的其他地方对更大的库存数量产生连锁反应,但是当您处理单数量商品时,我猜您可能没问题。
更新(使用 $update):
从 Wordpress 3.7 开始,save_post 添加了第三个参数,因此您可以轻松判断它是正在创建的新帖子还是正在更新的现有帖子。因此,您可以在创建新帖子时仅触发上面的函数(可以说这是所需的效果):
add_action('save_post_product', 'myWoo_savePost', 10, 3);
function myWoo_savePost($postID, $post, $update) {
if (!$update) {
// $update is false if we're creating a new post
update_post_meta($post->ID, '_manage_stock', 'yes');
update_post_meta($post->ID, '_stock', '1');
}
}
(感谢Dylan 提醒有关特定帖子类型的保存)
【讨论】:
/* product page, hide qty for 1 product */ .single-product div.product form.cart .quantity .qty { margin-right: 1em; } .single-product div.product form.cart .button { float: none; } .single-product div.product form.cart .quantity .qty[max="1"] { visibility: hidden; display: none; }
save_post_{$post->post_type} 钩子,它将转换为 save_post_product。然后,您可以删除 post_type 条件。
有点晚了,但其他人需要这样做...我在其他地方找到了大部分代码,但我没有找到它的链接了。稍微调整了一下,这就是我最终得到的(添加到functions.php):
add_action( 'admin_enqueue_scripts', 'wc_default_variation_stock_quantity' );
function wc_default_variation_stock_quantity() {
global $pagenow, $woocommerce;
$default_stock_quantity = 1;
$screen = get_current_screen();
if ( ( $pagenow == 'post-new.php' || $pagenow == 'post.php' || $pagenow == 'edit.php' ) && $screen->post_type == 'product' ) {
?>
<!-- uncomment this if jquery if it hasn't been included
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js"></script>
-->
<script type="text/javascript">
jQuery(document).ready(function(){
if ( !jQuery( '#_manage_stock' ).attr('checked') ) {
jQuery( '#_manage_stock' ).attr('checked', 'checked');
}
if ( '' === jQuery( '#_stock' ).val() ) {
jQuery( '#_stock' ).val(<?php echo $default_stock_quantity; ?>);
}
});
</script>
<?php
}
}
【讨论】:
Woocommerce 现在有自己的挂钩来保存产品。对于一个简单的产品,它是woocommerce_process_product_meta_simple。
在更新元数据之前,我们应该首先检查_manage_stock 是否为空,即该复选框未被选中,以便它仅在尚未设置的产品上触发。
然后切换管理库存并设置默认库存编号。
function manage_stock_default( $post_id ) {
if (empty($_POST['_manage_stock'])) {
update_post_meta($post_id, '_manage_stock', 'yes');
update_post_meta($post_id, '_stock', '1');
}
}
add_action( 'woocommerce_process_product_meta_simple', 'manage_stock_default');
【讨论】: