Изменить мета-запрос товара по шорткодам Woocommerce - PullRequest
0 голосов
/ 20 декабря 2018

Я работаю в магазине woocommerce, в котором я должен показывать товары на заказной стоимости.Продукт принадлежит любому месту.Я завершил работу над плагином почти на 50%, продукты на странице магазина отлично фильтруются, но некоторые продукты, товары для продажи, последние продукты и т. Д. Не получают фильтра, потому что они генерируются из шорткодов продуктов woocommerce.

До сих пор я добавил пользовательский файл на странице продукта администратора и показал фильтр продуктов на веб-интерфейсе на странице магазина.Теперь я хочу отфильтровать продукты по шорткоду.

Я добавил пользовательский файл на странице информации о продукте на сайте администратора ниже:

/* adding custom product field: location */ 
function add_custom_product_text_filed(){
global $woocommerce, $post;

$locatons = array('all' => 'All');
$locations_posts = get_posts(array('post_type' => 'location', 'numberposts' => -1));
foreach ($locations_posts as $loc_post) {
    $locatons[$loc_post->ID] = $loc_post->post_title;
}

echo '<div class="options_group">';

woocommerce_wp_select(
    array(
        'id' => '_location',
        'label' => __('Location'),
        'desc_tip' => true,
        'description'   => __('Enter the product location here'),
        'options' => $locatons,
    )
);
echo '</div>';
}

А ниже приведен код показа продуктов на основена месте

/*Get Location Based Products*/
add_action( 'woocommerce_product_query', 'location_products' );
function location_products($q){
if (isset($_COOKIE['wc_location_product_id']) && !empty($_COOKIE['wc_location_product_id']) && !is_null($_COOKIE['wc_location_product_id']) && $_COOKIE['wc_location_product_id'] != 'all') {
    $meta_query = $q->get('meta_query');
    $meta_query[] = array(
        'key' => '_location',
        'value' => $_COOKIE['wc_location_product_id'],
        'compare' => '=',
    );
    $q->set('meta_query', $meta_query);
}
}

Теперь я хочу изменить рабочий шорткод продуктов woocommerce (товары для продажи, продукты с характеристиками, последние продукты и т. д.) в соответствии с пользовательским полем местоположения, поскольку на странице используется шорткод для отображения продуктов, но я нене понимаю, как я могу изменить способ функциональности шорткода.Есть ли какой-либо хук или фильтр для выполнения этой задачи, или любой пример, который дает представление о том, как это сделать.Ваша помощь приветствуется.Спасибо.

1 Ответ

0 голосов
/ 20 декабря 2018

Следующий код, использующий woocommerce_shortcode_products_query выделенную ловушку фильтра, позволяет изменить запрос продукта для коротких кодов Woocommerce:

add_filter( 'woocommerce_shortcode_products_query', 'shortcode_products_query_on_location', 10, 3 );
function shortcode_products_query_on_location( $query_args, $atts, $loop_name ){
    if (isset($_COOKIE['wc_location_product_id']) && !empty($_COOKIE['wc_location_product_id']) && !is_null($_COOKIE['wc_location_product_id']) && $_COOKIE['wc_location_product_id'] != 'all') {

        $query_args['meta_query'] = array( array(
            'key'     => '_location',
            'value'   => $_COOKIE['wc_location_product_id'],
            'compare' => '=',
        ) );
    }
    return $query_args;
}

Код помещается в файл function.php вашей активной дочерней темы (или активной темы).Это должно работать.

...