Исключить продукты с определенными метаданными из виджета последних продуктов WooCommercePhp

Кемеровские программисты php общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Исключить продукты с определенными метаданными из виджета последних продуктов WooCommerce

Сообщение Anonymous »

В настоящее время я пытаюсь исключить определенные продукты из виджета последних продуктов WooCommerce.
В частности, я хочу запретить отображение продуктов с определенными метаданными:
Мета-ключ _age_limit установлено метазначение «大人向け» (для взрослых).
Виджет, из которого я хочу исключить продукты для взрослых, — это «Новые продукты», и он расположен на переднем плане. Страница (см. скриншот ниже).
Изображение

Я добавил следующий код в свой файл function.php, но он не работает должным образом:

Код: Выделить всё

add_filter('woocommerce_shortcode_products_query', 'exclude_adult_products_from_recent_products', 10, 3);
function exclude_adult_products_from_recent_products($query_args, $atts, $loop_name){
if( $loop_name == 'recent_products' ){
$query_args['meta_query'][] = array(
'key' => '_age_limit',
'value' => '大人向け',
'compare' => '!=',
);
}
return $query_args;
}
_age_limit — это метаключ, используемый для настраиваемого поля продукта.
Тема, которую я использую, — это официальная витрина WooCommerce. тему и получите последние версии WordPress и WooCommerce.
Я подтвердил, что теги правильно хранятся в базе данных, и когда я тестировал SQL-запрос непосредственно в phpMyAdmin, он вернул ожидаемые результаты. . Вот SQL-запрос, который я использовал:

Код: Выделить всё

SELECT * FROM ierd_postmeta WHERE meta_key = ‘_age_limit’ AND meta_value = ‘大人向け’;
Запрос успешно возвращает ожидаемые продукты с тегом «大人向け». Однако код фильтра WooCommerce, похоже, не исключает эти продукты из виджета последних продуктов.
Ниже показано, как я добавил настраиваемое метаполе для возрастного ограничения в файлеfunctions.php::< /p>

Код: Выделить всё

function custom_product_general_fields() {
woocommerce_wp_select( array(
'id'      => '_age_limit',
'label'   => __( 'Age Limit', 'woocommerce' ),
'options' => array(
'全年齢'   => __( '全年齢', 'woocommerce' ),
'大人向け' => __( '大人向け', 'woocommerce' ),
),
));
}
add_action( 'woocommerce_product_options_general_product_data', 'custom_product_general_fields' );
Я действительно борюсь с этой проблемой и не понимаю, почему этот фильтр не работает должным образом.

Очень проблематично, что товары для взрослых отображается на главной странице, и меня это беспокоит.
Будем очень признательны за любые советы о том, как отладить или решить эту проблему.
< hr />
EDIT
Как было предложено, я также попробовал вместо этого использовать хук woocommerce_products_widget_query_args, например:

Код: Выделить всё

function exclude_adult_products_from_newest_widget($query_args) {
// Applicable only for front page
if (is_front_page()) {

// Initialize a metaquery or retrieve an existing query
$meta_query = isset($query_args['meta_query']) ? $query_args['meta_query'] : array();

// Exclude products with metafield _age_limit value "For adults"
$query_args['meta_query'][]= array(
'key'     => '_age_limit',
'value'   => '大人向け',
'compare' => '!='
);

}

return $query_args;
}
add_filter('woocommerce_products_widget_query_args', 'exclude_adult_products_from_newest_widget');
Но это не сработало даже после очистки кеша браузера…

Подробнее здесь: https://stackoverflow.com/questions/790 ... cts-widget
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Php»