我创建了一个自定义管理产品复选框,如果该复选框处于活动状态,我想将任何商店存档/类别页面上这些产品的“添加到购物车”按钮替换为“查看产品”,并且该按钮应产品页面的查看者。
其他没有启用该复选框的商店商品应表现正常,并显示“添加到购物车”按钮并保留其功能。
我在管理端使用了该复选框,以下代码没有问题:
// Display Checkbox
add_action('woocommerce_product_options_general_product_data', 'product_custom_fields_add');
function product_custom_fields_add(){
global $post;
echo '<div class="product_custom_field">';
// Custom Product Checkbox Field
woocommerce_wp_checkbox( array(
'id' => '_no_addcart_product',
'desc' => __('show or hide add to cart', 'woocommerce'),
'label' => __('Hide Add To Cart', 'woocommerce'),
'desc_tip' => 'true'
));
echo '</div>';
}
// Save Checkbox
add_action('woocommerce_process_product_meta', 'product_custom_fields_save');
function product_custom_fields_save($post_id){
// Custom Product Text Field
$no_addcart_product = isset( $_POST['_no_addcart_product'] ) ? 'yes' : 'no';
update_post_meta($post_id, '_no_addcart_product', esc_attr( $no_addcart_product ));
}
我想出了以下代码,尝试根据复选框状态添加if条件。
add_filter( 'woocommerce_loop_add_to_cart_link', 'replacing_add_to_cart_button', 10, 2 );
function replacing_add_to_cart_button( $button, $product ) {
if ( $product->get_meta('_no_addcart_product') === 'yes' )
$button_text = __("View product", "woocommerce");
$button = '<a class="button" href="'. $product->get_permalink().'">' . $button_text.'</a>';
return $button;
}
它部分地更改按钮文本和复选框处于活动状态的任何产品的链接。但是,问题在于它还会从所有其他商店商品中删除文本,并为所有未激活复选框的商品留空按钮(请参见下图)。这些产品的链接也更改为产品页面,而不是我希望保留的“添加到购物车”链接。
我已经阅读了很多线程,这些线程全局地更改了所有产品的按钮,但是还没有找到仅适用于某些产品的任何条件逻辑,这些条件逻辑可以帮助我弄清楚这一点。因此,任何帮助将不胜感激。预先非常感谢。
答案 0 :(得分:1)
已更新
您上一个功能代码中的问题与您的 IF
语句有关,该语句需要括号:
add_filter( 'woocommerce_loop_add_to_cart_link', 'replacing_add_to_cart_button', 10, 2 );
function replacing_add_to_cart_button( $button, $product ) {
if ( $product->get_meta('_no_addcart_product') === 'yes' ) {
$button_text = __("View product", "woocommerce");
$button = '<a class="button" href="'. $product->get_permalink().'">' . $button_text.'</a>';
}
return $button;
}
代码进入您的活动子主题(或活动主题)的function.php文件中。现在应该可以使用了。