6

是否有一个钩子可以允许在全球范围内的 woocommerce 中设置“库存”>“管理库存”复选框?

我所有的产品都是单品数量,所以总是要记得检查它似乎很反干燥,尤其是对于其他员工。

4

3 回答 3

10

虽然这已经很晚了,因为你问了一个钩子:虽然似乎没有专门用于打开Manage Stock选项的钩子、动作或函数,但你仍然可以钩入后保存功能并以这种方式自动启用它,因为它只是一个 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提醒有关后期类型特定保存的信息)

于 2014-08-25T11:34:12.107 回答
2

有点晚了,但这是其他需要这样做的人的方法......我在其他地方找到了大部分代码,但我没有找到它的链接了。稍微调整了一下,这就是我最终得到的(添加到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
  }
}
于 2013-05-31T19:59:56.550 回答
0

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');
于 2017-09-18T16:59:10.647 回答