结合WooCommerce Checkout / Cart页面并添加交叉销售

时间:2017-05-15 21:44:23

标签: php wordpress woocommerce hook checkout

我已将结帐和购物车的短代码合并到两列的结帐页面上,以减少完成付款的点击次数。

然而,我发现钩子似乎对这种安排很奇怪。

例如,我正在尝试将交叉销售部分放在购物车部分下方。在默认购物车页面上,默认情况下会显示。结合推车和结账一起使它消失。

逻辑方法是这样做:

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

没有做任何事。

出于绝望,我随后复制并修改了cross-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条件运行并显示“没有交叉销售显示”。所以它可能会失去$cross_sells对象的范围。

我是否有希望实现这一目标?

2 个答案:

答案 0 :(得分:2)

WooCommerce支持得到了一个帮助我的答案。我没有为任何事情分配$cross_sells。我需要像$cross_sells = array_filter( array_map( 'wc_get_product', WC()->cart->get_cross_sells() ), 'wc_products_array_filter_visible' );

那样分配它

但我仍然很想知道为什么挂钩动作不起作用。

答案 1 :(得分:0)

关于为什么用钩子无法实现的原因,可能是因为您钩住了该动作的函数的第一行代码是

function woocommerce_cross_sell_display( $limit = 2, $columns = 2, $orderby = 'rand', $order = 'desc' ) {
  if ( is_checkout() ) {
    return;
  }