0

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;

事实证明不是。任何帮助将不胜感激,因为这让我发疯。

干杯!

4

2 回答 2

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>
于 2013-02-18T17:50:16.273 回答
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 );
于 2014-12-02T23:31:51.877 回答