В частности, я хочу запретить отображение продуктов с определенными метаданными:
Мета-ключ _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;
}
Тема, которую я использую, — это официальная витрина WooCommerce. тему и получите последние версии WordPress и WooCommerce.
Я подтвердил, что теги правильно хранятся в базе данных, и когда я тестировал SQL-запрос непосредственно в phpMyAdmin, он вернул ожидаемые результаты. . Вот SQL-запрос, который я использовал:
Код: Выделить всё
SELECT * FROM ierd_postmeta WHERE meta_key = ‘_age_limit’ AND meta_value = ‘大人向け’;
Ниже показано, как я добавил настраиваемое метаполе для возрастного ограничения в файле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