在WooCommerce上遇到一些麻烦,基本上我正在工作的商店中,需要一个选项来显示"呼叫订购"消息,而不是显示默认值要"形式或"售罄"消息。
我通过在产品编辑后端添加自定义的metabox复选框来实现这一目标,而单个产品中的if语句则添加到购物车模板中,唯一的问题就是将添加到购物车表单中隐藏而且该产品仍然可以像" http://localhost/wordpress/woocommerce/shop/?add-to-to-cart" = 14英寸一样添加。
我正在寻找的是在检查自定义复选框时以某种方式使产品失去库存,我在WooCommerce插件admin后端文件中查看,这经常使用:
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;
事实并非如此。任何帮助都将不胜感激,因为这让我发疯。
欢呼!
将项目隐藏在库存按钮中:
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>
to:
<p class="out-of-stock" ><?php echo apply_filters( 'out_of_stock_add_to_cart_text', __( 'Out of Stock', 'woocommerce' ) ); ?></p>
我在产品类中没有任何过滤器来调整库存数量或状态...可能是因为这种失败了股票管理的目的。
,我们可以做2件事中的1件。(我认为我们不需要两者,但是谁知道。)无论如何,首先,我们可以添加一些自定义验证,以防止该物品被添加到购物车中。
/*
* 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为布尔人使用"是"one_answers"否",这就是我的代码所代表的。根据需要适应。
/*
* 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 );