簡體   English   中英

根據WooCommerce中的產品自定義字段和產品類別隱藏添加到購物車按鈕

[英]Hide Add To Cart Button based on product custom field and product category in WooCommerce

我想在woocommerce產品頁面后端添加一個自定義復選框,隱藏前端的“添加到購物車”按鈕。 我不想刪除完全購買商品的能力(仍然希望能夠使用直接添加到購物車網址將商品添加到購物車並購買)所以我不想使用add_filter('woocommerce_is_purchasable', 'my_woocommerce_is_purchasable', 10, 2); 或類似的。

我目前取得的成就是:

添加自定義復選框

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

還有一個隱藏添加到購物車按鈕,具體取決於類別片段。

function remove_product_description_add_cart_button(){
    global $product;      
    $category = 'hide';        
    if ( has_term( $category, 'product_cat', $product->id ) )
        remove_action( 'woocommerce_single_product_summary', 'woocommerce_template_single_add_to_cart', 30 );
}

add_action('wp','remove_product_description_add_cart_button');

上述兩種方法都可以自行完成。 我失敗的地方是嘗試將它們組合起來只是為了刪除添加到購物車按鈕,如果復選框處於活動狀態(我也不需要檢查類別)。 我把下面的代碼放在一起,希望它可以工作,但事實並非如此。

function remove_product_description_add_cart_button() {
    if ( is_product() && get_post_meta( $post->ID, '_no_addcart_product', true ) == 'yes' ) {
        remove_action( 'woocommerce_single_product_summary', 'woocommerce_template_single_add_to_cart', 30 );
}

add_action('wp','remove_product_description_add_cart_button');

非常感謝您提供正確方向的任何幫助。

您可以通過以下方式將兩個條件與關系OR參數組合在一起:

add_action( 'woocommerce_single_product_summary', 'remove_product_add_to_cart_button', 4 );
function remove_product_add_to_cart_button(){
    global $product;

    $term_slug = 'hide'; // Product category term slug

    if ( has_term( $term_slug, 'product_cat', $product->get_id() ) || $product->get_meta('_no_addcart_product') === 'yes' )
        remove_action( 'woocommerce_single_product_summary', 'woocommerce_template_single_add_to_cart', 30 );
}

代碼位於活動子主題(或活動主題)的function.php文件中。 它應該工作。

注意:由於Woocommerce 3無法直接訪問WC_Product 屬性,因此您需要使用WC_Product Object $product可用方法

  • 對於產品ID,您將使用get_id()方法,例如: $product->get_id()
  • 對於產品自定義元數據,您還可以使用get_meta()方法

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM