在 Woocommerce 中排除相关产品 ID

问题描述 投票:0回答:2
function woocommerce_output_related_products() {

    $args = array(
        'posts_per_page' => 4,
        'columns'        => 4,
        'orderby'        => 'rand', // @codingStandardsIgnoreLine.
        'post__not_in' => array(502,281)
    );

    woocommerce_related_products( apply_filters( 'woocommerce_output_related_products_args', $args ) );
}

我将此函数从

includes/wc-template-functions.php
复制到我的主题的functions.php

为了验证我的更改是否有效,我将

posts_per_page
更改为 3,并且它仅查询 3 而不是 4。

我需要排除一些产品,但

post__not_in
不起作用。

我做错了什么吗?我还能如何排除使用此功能的产品?

我正在输出具有此功能的产品:

woocommerce_output_related_products();

这么令人讨厌的问题。我根本无法排除这里的产品。有人可以帮忙吗?

我也尝试过这个:

add_filter( 'woocommerce_output_related_products_args', function( $args ) { 
    $args = wp_parse_args( array(  "post__not_in" => array('502','281') ), $args );
    return $args;
});

我做了 print_r($args) ,它显示我的“post__not_in”被添加,但产品仍然存在。我有正确的身份证件。

php wordpress woocommerce product hook-woocommerce
2个回答
3
投票

使用

woocommerce_related_products
过滤钩,这样:

add_filter( 'woocommerce_related_products', 'exclude_related_products', 10, 3 );
function exclude_related_products( $related_posts, $product_id, $args ){
    // HERE set your product IDs to exclude
    $exclude_ids = array('502','281');

    return array_diff( $related_posts, $exclude_ids );
}

代码位于活动子主题(或活动主题)的 function.php 文件中。已测试并有效。


0
投票
  remove_action( 'woocommerce_after_single_product_summary', 'woocommerce_output_related_products', 20);
add_action( 'woocommerce_before_single_product_summary', 'woocommerce_output_related_products', 25);
function woocommerce_output_related_products(){
    $args = array( 
        'posts_per_page' => 4,  
        'columns' => 4,  
        'orderby' => 'rand' 
 ); 
  $args['meta_query'][] = array(
       'key' => '_stock_status',
       'value' => 'instock',
       'compare' => 'IN'
     );
    woocommerce_related_products( apply_filters( 'woocommerce_output_related_products_args', $args ) );
© www.soinside.com 2019 - 2024. All rights reserved.