我的主题在购物车页面上显示交叉销售产品,这很好。
这是通过下面的代码完成的,该代码可以在cart/cross-sells.php
模板文件中找到。
<?php foreach ( $cross_sells as $cross_sell ) : ?>
<?php
$post_object = get_post( $cross_sell->get_id() );
setup_postdata( $GLOBALS['post'] =& $post_object ); // phpcs:ignore WordPress.WP.GlobalVariablesOverride.Prohibited, Squiz.PHP.DisallowMultipleAssignments.Found
wc_get_template_part( 'content', 'product' );
?>
<?php endforeach; ?>
但是我不想展示缺货的产品。
我设法更改了交叉销售等的列数,但是我找不到任何只显示可用产品的代码段。
有人可以引导我完成该操作吗?
答案 0 :(得分:1)
总是有多种解决方案,但其中一种可能是通过覆盖模板文件
https://github.com/woocommerce/woocommerce/blob/3.8.0/templates/cart/cross-sells.php
替换(行:28-38)
<?php foreach ( $cross_sells as $cross_sell ) : ?>
<?php
$post_object = get_post( $cross_sell->get_id() );
setup_postdata( $GLOBALS['post'] =& $post_object ); // phpcs:ignore WordPress.WP.GlobalVariablesOverride.OverrideProhibited, Squiz.PHP.DisallowMultipleAssignments.Found
wc_get_template_part( 'content', 'product' );
?>
<?php endforeach; ?>
使用
<?php foreach ( $cross_sells as $cross_sell ) : ?>
<?php
$stock_status = $cross_sell->get_stock_status();
if ( $stock_status != 'outofstock' ) {
$post_object = get_post( $cross_sell->get_id() );
setup_postdata( $GLOBALS['post'] =& $post_object ); // phpcs:ignore WordPress.WP.GlobalVariablesOverride.OverrideProhibited, Squiz.PHP.DisallowMultipleAssignments.Found
wc_get_template_part( 'content', 'product' );
}
?>
<?php endforeach; ?>
答案 1 :(得分:0)
woocommerce->设置-> productst->库存->无库存可见性=选中此按钮。
答案 2 :(得分:0)
受到@7uc1f3r 回答的启发,我提出了这个解决方案,该解决方案也将标题隐藏在 cas 中,没有要显示的产品。
我确实覆盖了 /wp-content/plugins/woocommerce/templates/cart/cross-sells.php
,在我的子主题 /wp-content/themes/MY-CHILD-THEME/woocommerce/content-product.php
中创建了一个文件,代码如下:
<?php
/**
* Cross-sells
*
* This template can be overridden by copying it to yourtheme/woocommerce/cart/cross-sells.php.
*
* HOWEVER, on occasion WooCommerce will need to update template files and you
* (the theme developer) will need to copy the new files to your theme to
* maintain compatibility. We try to do this as little as possible, but it does
* happen. When this occurs the version of the template file will be bumped and
* the readme will list any important changes.
*
* @see https://docs.woocommerce.com/document/template-structure/
* @package WooCommerce\Templates
* @version 4.4.0
*/
defined( 'ABSPATH' ) || exit;
if ( $cross_sells ) : ?>
<?php
ob_start();
foreach ( $cross_sells as $cross_sell ) :
$stock_status = $cross_sell->get_stock_status();
if ( $stock_status != 'outofstock' ) { // only display product if it is not out of stock
$post_object = get_post( $cross_sell->get_id() );
setup_postdata( $GLOBALS['post'] =& $post_object ); // phpcs:ignore WordPress.WP.GlobalVariablesOverride.Prohibited, Squiz.PHP.DisallowMultipleAssignments.Found
wc_get_template_part( 'content', 'product' );
}
endforeach;
$html = ob_get_clean();
if ($html) { // only display the whole cross sells section of there's something to display
?>
<div class="cross-sells">
<?php
$heading = apply_filters( 'woocommerce_product_cross_sells_products_heading', __( 'You may be interested in…', 'woocommerce' ) );
if ( $heading ) :
?>
<h2><?php echo esc_html( $heading ); ?></h2>
<?php endif; ?>
<?php woocommerce_product_loop_start(); ?>
<?php echo $html; ?>
<?php woocommerce_product_loop_end(); ?>
</div>
<?php
}
?>
<?php
endif;
wp_reset_postdata();