根据自定义管理员复选框的情况,更改商店档案中的“添加到购物车”按钮

时间:2019-02-24 23:08:54

标签: php wordpress if-statement woocommerce brackets

我创建了一个自定义管理产品复选框,如果该复选框处于活动状态,我想将任何商店存档/类别页面上这些产品的“添加到购物车”按钮替换为“查看产品”,并且该按钮应产品页面的查看者。

其他没有启用该复选框的商店商品应表现正常,并显示“添加到购物车”按钮并保留其功能。

我在管理端使用了该复选框,以下代码没有问题:

// 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;
}

它部分地更改按钮文本和复选框处于活动状态的任何产品的链接。但是,问题在于它还会从所有其他商店商品中删除文本,并为所有未激活复选框的商品留空按钮(请参见下图)。这些产品的链接也更改为产品页面,而不是我希望保留的“添加到购物车”链接。

Empty Buttons

我已经阅读了很多线程,这些线程全局地更改了所有产品的按钮,但是还没有找到仅适用于某些产品的任何条件逻辑,这些条件逻辑可以帮助我弄清楚这一点。因此,任何帮助将不胜感激。预先非常感谢。

1 个答案:

答案 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文件中。现在应该可以使用了。