我在我的功能中为我的旧/已停产产品创建(复制)自定义发布状态。php和一切都很好。
现在,我想通过删除购物车按钮和状态产品(在本例中为“过期”),使这些旧产品无法购买。
我想我必须使用get_post_status()
和
remove_action( \'woocommerce_after_shop_loop_item\', \'woocommerce_template_loop_add_to_cart\');
remove_action( \'woocommerce_single_product_summary\', \'woocommerce_template_single_add_to_cart\');
或通过使用
$is_purchasable=false
.
但坦率地说,我是一个乞丐,我不知道怎样才能从头开始创造它。。。
Edit :
我尝试了两种不同的选择,但都不管用。。。
function remove_cart_button_expired_product (){
global $product;
$id = get_the_ID();
$post_status = get_post_status($id);
if ($post_status === \'expired\') {
//echo $id; // working
//echo $post_status; // working
remove_action( \'woocommerce_after_shop_loop_item\', \'woocommerce_template_loop_add_to_cart\',1);
remove_action( \'woocommerce_single_product_summary\', \'woocommerce_template_single_add_to_cart\',1);
}
}
add_action(\'wp\', \'remove_cart_button_expired_product\');
这个不起作用可能是因为我的Divi主题。。。
function product_not_purchasable(){
global $product;
$id = $product->get_id();
$post_status = get_post_status($id);
if ($post_status === \'expired\') {
//echo $id; // working
//echo $post_status; // working
$purchasable = false;
return $purchasable;
}
}
add_filter(\'woocommerce_is_purchasable\', \'product_not_purchasable\');
我发现这一行代码比前一行代码更可取,但当我试图在购物车中添加产品时,它会破坏我的网站(与帖子状态无关)。
最合适的回答,由SO网友:Kentin.R 整理而成
几天后终于找到了我的解决方案。
万一有人也这么做
function test_expired_product(){
$id = get_the_ID();
$post_status = get_post_status($id);
$terms= array(\'cursus-annuel\');
if ($post_status === \'expired\' || $post_status === \'canceled\') {
//echo $id; // working
//echo $post_status; // working
add_filter(\'woocommerce_is_purchasable\', \'__return_false\');
add_action( \'woocommerce_single_product_summary\', \'expired_product_message\', 20 );
return;
}
if( has_term( $terms, \'product_cat\' ) ){
add_filter(\'woocommerce_is_purchasable\', \'__return_false\');
add_action( \'woocommerce_single_product_summary\', \'unpurchasable_product_message\', 20 );
return;
}
}
add_action(\'wp\',\'test_expired_product\');
function expired_product_message() {
echo \'<p style="color:#e00000;">Ce produit n\\\'est plus disponible.</p>\';
}
function unpurchasable_product_message() {
echo \'<p style="color:#e00000;">Ce produit ne peut pas être acheté en ligne. Veuillez nous contacter afin de reserver ce cours.</p>\';
}