2017-09-24 18 views
1

WooCommerceでは、特定のカテゴリの私達に連絡するためのカスタムボタン追加ボタンがリダイレクトされます(顧客が単一商品ページのカートに追加ボタンをクリックすると)。woocommerce woocommerce wooocommerceカートに入れる単一の商品ページのボタン

これは私のコードです:

add_filter('woocommerce_add_to_cart_redirect', 'rv_redirect_to_url'); 
function rv_redirect_to_url() { 

    global $woocommerce, $post; 

    $product_id = apply_filters('woocommerce_add_to_cart_product_id', absint($_REQUEST['add-to-cart'])); 

    $rv_woo_redirect_url = get_post_meta($product_id, '_rv_woo_product_custom_redirect_url', true); 

    if (! empty($rv_woo_redirect_url)) { 

     wp_redirect(esc_url($rv_woo_redirect_url)); exit; 

    } 

} 

どのように私はそれが定義された製品カテゴリのみ働いて得るために、私のコードを変更することができますか?

+0

あなたのコードは、あなたがしたいことと比べて何をしていますか?また、リダイレクトは、製品がカートに追加された後に発生すると考えられます。まだそれをカートに追加したいですか?それは連絡先ページに向けてリダイレクトするというあなたの欲望とは異なると思われます。 – helgatheviking

+0

@helgathevikingいいえ特別注文になるカートに追加したくない場合 –

+0

その場合、リダイレクトは間違ったアプローチだと思います。 – helgatheviking

答えて

1

更新定義されたために製品が(カートに追加されたときに顧客をリダイレクトするカスタム関数を使用して

woocommerce_add_to_cart_redirectフィルターフックに引っかけ(それが定義されている製品のカテゴリは右カスタムURL)、 製品カテゴリ(複数可)

add_filter('woocommerce_add_to_cart_redirect', 'conditional_add_to_cart_redirection', 99, 1); 
function conditional_add_to_cart_redirection($url) { 

    // ==> HERE define your product category or categories in the array 
    $category = array('clothing', 'music'); 

    if (! isset($_REQUEST['add-to-cart'])) return $url; // Very important! 

    // When it's available (on add to cart click), get the product ID 
    $product_id = absint($_REQUEST['add-to-cart']); 

    // Get the custom url from product post meta data 
    $custom_url = get_post_meta($product_id, '_rv_woo_product_custom_redirect_url', true); 

    // Exit to normal, If the custom URL redirection is not set in the product 
    if(empty($custom_url)) return $url; 

    // Custom redirection only for your defined product category(ies) 
    if(has_term($category, 'product_cat', $product_id)){ 
     // Clear add to cart notice (with the cart link). 
     wc_clear_notices(); 
     $url = $custom_url; // Updated here 
    } 
    return $url; 
} 

コードがfunction.php Fiの中に入りますあなたのアクティブな子供のテーマ(またはテーマ)のファイル、またはすべてのプラグインファイルに保存されます。

コードがWoocommerce 3+上でテストし、お店やアーカイブのページでカートに追加AJAXでは動作しません


がカートのリダイレクトに追加されて動作します。無効にAJAXを追加ツーカートショップやアーカイブページ(WC設定>製品>ディスプレイ)に

  1. :だから、お店やアーカイブページのためにその2つのオプションの間で選択するを持つことになります。
  2. 製品にリンクされているボタンで、カートに追加]ボタンを交換するには、次のコードを追加します。

この第二のオプションは、(これが唯一のいくつかの製品に条件付きであるとして)最高のようだ:

-919-

コードはアクティブな子テーマ(またはテーマ)のfunction.phpファイル、またはすべてのプラグインファイルに入ります。

コードは、製品を完全に購入されることを意図していない場合、私はwoocommerce_is_purchasableをフィルタリングし、自分の連絡先にボタンスタイルのリンクをカートに追加]ボタンを置き換えますWoocommerce 3+でテストおよび

0

を動作します形。

function so_46395830_not_purchasable($is_purchasable, $product) { 

    $rv_woo_redirect_url = $product->get_meta('_rv_woo_product_custom_redirect_url', true); 

    if (! empty($rv_woo_redirect_url)) { 
     add_action('woocommerce_single_product_summary', 'so_46395830_redirect_to_contact'); 
    } 
    return $is_purchasable; 
} 
add_filter('woocommerce_is_purchasable', 'so_46395830_not_purchasable', 10, 2); 


function so_46395830_redirect_to_contact($url) { 
    global $product; 
    $rv_woo_redirect_url = $product->get_meta('_rv_woo_product_custom_redirect_url', true); 
    echo sprintf('<a class="button" href="%s">%s</a>', esc_url($rv_woo_redirect_url), __('Contact Us for Info', 'your-plugin-textdomain')); 
} 
関連する問題