WooCommerce,如果选中自定义Meta复选框,则将产品退回“售罄”

时间:2012-10-18 16:28:37

标签: php wordpress woocommerce

在WooCommerce遇到一些麻烦,基本上在我正在处理的商店上,需要选择显示“来电订购”消息,而不是显示默认的“添加到购物车”表格或“售罄” “消息。

我通过在产品编辑后端添加自定义元框复选框以及单个产品中的if语句添加到购物车模板来实现此目的,唯一的问题是所有这一切都隐藏了添加到购物车表单并且产品仍然可以像“http:// localhost / wordpress / woocommerce / shop /?add-to-cart = 14”一样添加,因此它不完全是完全证明的。

我正在寻找的是在选中自定义复选框时以某种方式使产品缺货,我查看了WooCommerce插件管理员后端文件并且使用了很多:

update_post_meta( $post_id, '_stock_status', 'outofstock' );

所以我认为这在functons.php中很容易:

global $post;
if ($meta_box = get_post_meta($post->ID, "_cmb_test_checkbox", true) ) :
update_post_meta( $post_id, '_stock_status', 'outofstock' );
endif;

原来不是。任何帮助将不胜感激,因为这让我发疯。

干杯!

2 个答案:

答案 0 :(得分:0)

隐藏物品缺货按钮:

    if (!function_exists('woocommerce_template_loop_add_to_cart')) {
        function woocommerce_template_loop_add_to_cart() {
            global $product;
            if (!$product->is_in_stock()) return;
            woocommerce_get_template('loop/add-to-cart.php');
        }
    }

更改“添加到购物车”按钮:

// Change the "Add to Cart" button on the single product page.
    function woo_custom_cart_button_text() {
        return __('My Button Text', 'woocommerce'); 
    }

    add_filter('single_add_to_cart_text', 'woo_custom_cart_button_text');

或者,如果您特别想修改模板结构:

在主题目录中创建一个名为/woocommerce的文件夹>在此名为/loop的内部创建另一个文件夹,并将add-to-cart.php文件放入其中。然后修改第17行

从:

<p class="out-of-stock" ><?php echo apply_filters( 'out_of_stock_add_to_cart_text', __( 'Read More', 'woocommerce' ) ); ?></p>

为:

<p class="out-of-stock" ><?php echo apply_filters( 'out_of_stock_add_to_cart_text', __( 'Out of Stock', 'woocommerce' ) ); ?></p>

答案 1 :(得分:0)

我没有在产品类中看到任何用于调整库存数量或状态的过滤器......可能因为这种方式违背了库存管理的目的。

所以我们可以做两件事之一。 (我认为我们不需要两者,但谁知道。)无论如何,首先我们可以添加一些自定义验证,以防止项目被添加到购物车。

/*
 * Validate when adding to cart
 * @param bool $passed
 * @param int $product_id
 * @param int $quantity
 * @return bool
 */
function so_12959338_add_to_cart_validation( $passed, $product_id, $qty ){

    if( 'yes' == get_post_meta( $product_id, '_cmb_test_checkbox', true ) ){
        $product = wc_get_product( $product_id );
        wc_add_notice( sprintf( __( '%s cannot be added to the cart because of reasons.', 'my-plugin-textdomain' ), $product->get_title() ), 'error' );
        return false;
    }

    return $passed;

}
add_filter( 'woocommerce_add_to_cart_validation', 'so_12959338_add_to_cart_validation', 10, 3 );

或者我们可以阻止它被添加到购物车中,并通过使产品不可购买来防止添加到购物车按钮甚至显示。

现在在我的两个代码块中,我不确定您使用复选框保存了什么值。 WooCommerce对布尔值使用“是”和“否”,这就是我的代码所代表的含义。根据需要进行调整。

/*
 * Make the item non-purchasable
 * @param bool $purchasable
 * @param obj $product
 * @return bool
 */
function so_12959338_is_purchasable( $purchasable, $product ){

    if( 'yes' == get_post_meta( $product->id, '_cmb_test_checkbox', true ) ){
        $purchasable = false;
    }

    return $purchasable;

}
add_filter( 'woocommerce_is_purchasable', 'so_12959338_is_purchasable', 10, 2 );