2017-05-15 15 views
0

チェックアウトとカートのショートコードを2つの列のチェックアウトページに組み合わせて、支払いを終了するクリック数を減らしました。WooCommerceチェックアウト/カートページとクロスセルを組み合わせて

しかし、私はフックがこの配置で不思議な動作をしているように見えます。

たとえば、カートセクショニングの下にクロスセリングセクションを配置しようとしています。デフォルトのカートページでは、デフォルトで表示されます。カートとチェックアウトを組み合わせると、それが消えます。

論理的なアプローチは、これを行うことです。何もしなかった

function add_cart_collaterals() { 
    if (is_checkout()) { 
     add_action('woocommerce_after_cart_contents', 'woocommerce_cross_sell_display'); 
    } 
} 
add_action('wp', 'add_cart_collaterals'); 

絶望のうち

、私はその後、コピーしてクロスsell.phpテンプレートコードを適応し、このように私の子供のテーマののfunctions.phpファイルに直接それを置く:

/* Display Cross-Sells below cart */ 
function show_cross_sell() { 
    if ($cross_sells) : 
     echo '<div class="cross-sells"><h2>'; 
     _e('You may be interested in&hellip;', 'woocommerce'); 
     echo '</h2>'; 
     woocommerce_product_loop_start(); 
      foreach ($cross_sells as $cross_sell) : 
       $post_object = get_post($cross_sell->get_id()); 
       setup_postdata($GLOBALS['post'] =& $post_object); 
       wc_get_template_part('content', 'product'); 
      endforeach; 
     woocommerce_product_loop_end(); 
     echo '</div>'; 
    else : { 
     echo 'No cross sells to display'; 
    } 
    endif; 
} 
add_action('woocommerce_after_cart_table', 'show_cross_sell', 10); 

しかし、唯一else条件の実行「No cross sells to display」と表示されます。だから、$cross_sellsオブジェクトのスコープを失った可能性があります。

私はこれを達成することができますか?

答えて

1

WooCommerceのサポートには私を助けた回答がありました。私は何にでも$cross_sellsを割り当てていませんでした。私はそれをこのように割り当てる必要がありました$cross_sells = array_filter(array_map('wc_get_product', WC()->cart->get_cross_sells()), 'wc_products_array_filter_visible');

しかし、私はフックアクションがうまくいかない理由を知りたいと思っています。

関連する問題