隐藏缺货Woocommerce相关产品

时间:2019-03-01 20:29:17

标签: php wordpress woocommerce product hook-woocommerce

在woocommerce中,我想在单个产品页面的相关产品中隐藏缺货产品。有可能吗?

任何轨道被理解。

4 个答案:

答案 0 :(得分:5)

此处给出的答案均不适合我(我相信提到的woocommerce_output_related_products_args过滤器不接受meta_queries),并且我想要一个不使用SQL查询的解决方案,因此将以下解决方案汇总在一起:

add_filter( 'woocommerce_related_products', 'mysite_filter_related_products', 10, 1 );
function mysite_filter_related_products( $related_product_ids ) {

    foreach( $related_product_ids as $key => $value ) {
        $relatedProduct = wc_get_product( $value );
        if( ! $relatedProduct->is_in_stock() ) {
            unset( $related_product_ids["$key"] );
        }
    }

    return $related_product_ids;
}

希望可以帮助寻求类似解决方案的人。

答案 1 :(得分:1)

尝试以下操作:

add_filter( 'woocommerce_product_related_posts_query', 'alter_product_related_posts_query', 10, 3 );
function alter_product_related_posts_query( $query, $product_id, $args ){
    global $wpdb;

    $query['join']  .= " INNER JOIN {$wpdb->postmeta} as pm ON p.ID = pm.post_id ";
    $query['where'] .= " AND pm.meta_key = '_stock_status' AND meta_value = 'instock' ";

    return $query;
}

代码进入您的活动子主题(或活动主题)的function.php文件中。我希望它能起作用。

答案 2 :(得分:0)

创建一个函数并将其挂钩到woocommerce的相关产品挂钩,例如:

function dont_show_outofstock( $is_visible, $id ) {
    $product = new wC_Product( $id );

    if ( ! $product->is_in_stock() && ! $product->backorders_allowed() ) {
    $is_visible = false;
    }

    return $is_visible;
}
add_filter( 'woocommerce_output_related_products_args', 'dont_show_outofstock', 10, 2 );

答案 3 :(得分:0)

是的,可以从相关产品中隐藏缺货的产品。

将以下内容添加到functions.php中-这将从相关产品中隐藏缺货的产品。

add_filter( 'woocommerce_output_related_products_args', function( $args )
{
    $args = wp_parse_args( array(
        'posts_per_page' => 4,
        'meta_query' => array (
           'key' => '_stock_status',
           'value' => 'instock'
    )
    ), $args );
    return $args;
});

每页行中的帖子数可以删除,但可以快速直观地看到这已在您的相关产品版块上发挥作用。