gpt4 book ai didi

php - 如何在 WooCommerce 结帐页面上显示购物车商品加售?

转载 作者:行者123 更新时间:2023-12-04 02:33:38 25 4
gpt4 key购买 nike

我需要一些帮助来在结帐页面上显示我购物车中所有产品的加售,下面的代码给我以下错误:

Call to a member function get_upsell_ids() on array in…

这是我的功能:

function show_cross_sell( $limit = '-1', $columns = 4, $orderby = 'rand', $order = 'desc' ) {
global $woocommerce;
$items = WC()->cart->get_cart();

if ( ! $items ) {
echo 'nothing';
return;
}

// Handle the legacy filter which controlled posts per page etc.
$args = apply_filters(
'woocommerce_upsell_display_args',
array(
'posts_per_page' => $limit,
'orderby' => $orderby,
'order' => $order,
'columns' => $columns,
)
);

foreach($items as $product) {
wc_set_loop_prop( 'name', 'up-sells' );
wc_set_loop_prop( 'columns', apply_filters( 'woocommerce_upsells_columns', isset( $args['columns'] ) ? $args['columns'] : $columns ) );

$orderby = apply_filters( 'woocommerce_upsells_orderby', isset( $args['orderby'] ) ? $args['orderby'] : $orderby );
$order = apply_filters( 'woocommerce_upsells_order', isset( $args['order'] ) ? $args['order'] : $order );
$limit = apply_filters( 'woocommerce_upsells_total', isset( $args['posts_per_page'] ) ? $args['posts_per_page'] : $limit );



// Get visible upsells then sort them at random, then limit result set.
$upsells = wc_products_array_orderby( array_filter( array_map( 'wc_get_product', $product->get_upsell_ids() ), 'wc_products_array_filter_visible' ), $orderby, $order );
$upsells = $limit > 0 ? array_slice( $upsells, 0, $limit ) : $upsells;

wc_get_template(
'single-product/up-sells.php',
array(
'upsells' => $upsells,

// Not used now, but used in previous version of up-sells.php.
'posts_per_page' => $limit,
'orderby' => $orderby,
'columns' => $columns,
)
);

}
}

最佳答案

您的代码中存在一些错误……以下代码将合并购物车商品中的所有加售 ID(不重复),将它们显示为一个独特的加售 block :

function show_items_upsells( $limit = '-1', $columns = 4, $orderby = 'rand', $order = 'desc' ) {
$cart = WC()->cart;

if ( WC()->cart->is_empty() ) {
echo 'nothing';
return;
}

$upsell_ids = $cart_item_ids = array();

// Loop through cart items
foreach( $cart->get_cart() as $cart_item ) {
// Merge all cart items upsells ids
$upsell_ids = array_merge( $upsell_ids, $cart_item['data']->get_upsell_ids() );
$cart_item_ids[] = $cart_item['product_id'];
}

// Remove cart item ids from upsells
$upsell_ids = array_diff($upsell_ids, $cart_item_ids);
$upsell_ids = array_unique($upsell_ids); // Remove duplicated Ids

// Handle the legacy filter which controlled posts per page etc.
$args = apply_filters( 'woocommerce_upsell_display_args', array(
'posts_per_page' => $limit,
'orderby' => $orderby,
'order' => $order,
'columns' => $columns,
));

wc_set_loop_prop( 'name', 'up-sells' );
wc_set_loop_prop( 'columns', apply_filters( 'woocommerce_upsells_columns', isset( $args['columns'] ) ? $args['columns'] : $columns ) );

$orderby = apply_filters( 'woocommerce_upsells_orderby', isset( $args['orderby'] ) ? $args['orderby'] : $orderby );
$_order = apply_filters( 'woocommerce_upsells_order', isset( $args['order'] ) ? $args['order'] : $order );
$limit = apply_filters( 'woocommerce_upsells_total', isset( $args['posts_per_page'] ) ? $args['posts_per_page'] : $limit );

// Get visible upsells then sort them at random, then limit result set.
$upsells = wc_products_array_orderby( array_filter( array_map( 'wc_get_product', $upsell_ids ), 'wc_products_array_filter_visible' ), $orderby, $_order );
$upsells = $limit > 0 ? array_slice( $upsells, 0, $limit ) : $upsells;

wc_get_template( 'single-product/up-sells.php', array(
'upsells' => $upsells,

// Not used now, but used in previous version of up-sells.php.
'posts_per_page' => $limit,
'orderby' => $orderby,
'columns' => $columns,
) );
}

代码进入事件子主题(或事件主题)的 function.php 文件。经过测试并有效。

用法: echo show_items_upsells();

关于php - 如何在 WooCommerce 结帐页面上显示购物车商品加售?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62891893/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com