
Итак, вот ситуация: я использую WordPress, и внутри него есть запрос, который я создал с помощью плагина фрагмента кода.< /p>
Используемые плагины:
Продукт: WooCommerce
Настраиваемые поля и настраиваемые сообщения: безопасный код настраиваемых полей
Фрагмент: Код Фрагмент PHP
Вот мой текущий код:
Код: Выделить всё
function my_query_by_post_types1( $query ) {
if ( is_product() && $query->is_main_query() ) {
$term_names = wp_get_post_terms( get_the_ID(), 'product_cat', array( 'fields' => 'names' ) );
if ( $term_names ) {
$query->set( 'post_type', 'news' );
$meta_query = array( 'relation' => 'OR' );
foreach ( $term_names as $term_name ) {
$meta_query[] = array(
'key' => 'product_category', // The meta key for the custom field in "news"
'value' => $term_name,
'compare' => 'LIKE',
);
}
$query->set( 'meta_query', $meta_query );
}
}
}
add_action( 'elementor/query/product_related_news', 'my_query_by_post_types1' );
Созданный мною фрагмент кода успешно отображает раздел новостей на одной странице продукта. . Однако он отображает все новости из базы данных, а не фильтрует их по категории продуктов. Например, хотя отображаемый продукт относится к категории «Компьютер», а раздел новостей содержит настраиваемые поля с возвращаемым значением «Компьютер», механизм фильтрации не работает должным образом. Следовательно, отображаются все новости, независимо от связанных с ними категорий продуктов.
Я пробовал несколько методов:
- Использование таксономии вместо настраиваемых полей в качестве категорий для созданного мной настраиваемого типа сообщений «Новости».
- Использование «fields => name» для получения имен из сгенерированного массива. автор wp_get_post_terms.
Настройки настраиваемых полей
Я пробовал отладку, используя приведенный ниже код, но сообщений, соответствующих созданному мной фильтру, найдено не было. Несмотря на то, что я добавил новость с категорией продукта, точно такой же, как продукт, который показываю.
Код: Выделить всё
function my_query_by_post_types1($query) {
if (is_singular('product')) {
// Get product categories
$terms = get_the_terms(get_the_ID(), 'product_cat');
if ($terms && !is_wp_error($terms)) {
// Get all category names
$category_names = array();
foreach ($terms as $term) {
$category_names[] = $term->name;
}
if (!empty($category_names)) {
$query->set('post_type', 'news');
$query->set('meta_query', array(
array(
'key' => 'product_category',
'value' => $category_names,
'compare' => 'IN'
)
));
// Debug output for admins
if (current_user_can('administrator')) {
echo '';
echo 'Categories found: ' . implode(', ', $category_names) . '
';
// Debug the query object
echo 'Query object:
';
print_r($query->query_vars); // Outputs query parameters
echo '';
if ($query->have_posts()) {
while ($query->have_posts()) {
$query->the_post();
echo get_the_title() . '
';
}
} else {
echo 'No posts found!';
}
echo '';
}
}
}
}
}
add_action('elementor/query/product_related_news', 'my_query_by_post_types1');
пример созданной мною новостной публикации
Подробнее здесь: https://stackoverflow.com/questions/792 ... page-using