WCFM Marketplace для WooCommerce — Игнорируйте текущий продукт

#php #wordpress #woocommerce #marketplace

Вопрос:

Я использую плагин WCFM Marketplace для WooCommerce и создаю единую страницу продукта в теме Elementor. Я хотел бы отобразить продукты поставщиков, и WCFM включает в себя шорткод [магазин товаров=»идентификатор»], который является частью стандартного шорткода WooCommerce [продукты].

Я спросил разработчиков WCFM, есть ли способ динамического добавления идентификатора магазина в шорткод, и они предоставили этот код:

 add_shortcode('wcfm_store_related_products','fn_wcfm_store_related_products');
function fn_wcfm_store_related_products($attr) {
    global $WCFM, $WCFMmp, $wp, $WCFM_Query, $post;     
    $store_id = '';
    if ( isset( $attr['id'] ) amp;amp; !empty( $attr['id'] ) ) { $store_id = absint($attr['id']); }   
    if (  wcfm_is_store_page() ) {
        $wcfm_store_url = get_option( 'wcfm_store_url', 'store' );
        $store_name = apply_filters( 'wcfmmp_store_query_var', get_query_var( $wcfm_store_url ) );
        $store_id  = 0;
        if ( !empty( $store_name ) ) {
            $store_user = get_user_by( 'slug', $store_name );
        }
        $store_id           = $store_user->ID;
    }   
    if( is_product() ) {
        $store_id = $post->post_author;
    }
    if( !$store_id amp;amp; is_single() amp;amp; $post amp;amp; is_object( $post ) amp;amp; wcfm_is_vendor( $post->post_author ) ) {
        $store_id = $post->post_author;
    }
    echo do_shortcode('[products columns="5" limit="10" store="'.$store_id.'"]');
}
 

Это работает, однако он также отображает текущий продукт при добавлении на одну страницу продукта.

Что я хотел бы сделать, так это проигнорировать текущий продукт (не показывать его). Кто-нибудь знает, как бы я поступил по этому поводу?

Ответ №1:

Я не знаю, есть ли у продуктов WC excluded параметры для продуктов или нет, но вы можете использовать woocommerce_shortcode_products_query крючок фильтра WC, чтобы вы могли изменять параметры по своему усмотрению в вашем случае, проверьте код ниже.

 function remove_current_prodcut_woocommerce_shortcode_products_query( $query_args, $attributes, $type ){
    global $post;
    if( is_product() ){
        $query_args['post__not_in'] = array($post->ID);
    }
    return $query_args;
}
add_filter( 'woocommerce_shortcode_products_query', 'remove_current_prodcut_woocommerce_shortcode_products_query', 10, 3 );
 

Комментарии:

1. Спасибо, я попробовал это, но он удалил все продукты, которые создает шорткод [products].

2. БОЖЕ, ты потрясающая! Это сработало идеально — большое вам спасибо!!