Intereting Posts
Нестандартные значения поля не отображаются на странице редактирования пользовательского типа сообщения WordPress – пользовательское меню навигации для зарегистрированных пользователей – тема Shopkeeper Один из моих заголовков таинственно подходит как ссылка в моем CPT Archive Как правильно создать цикл WordPress? Как разрешить Category Title использовать теги <b>? Лучший способ обеспечить иерархию категорий в post_categories_metabox? Скопировать настройки виджетов из одного блога в другой Детская тема – изменение заголовка Вставьте пользовательский идентификатор в wp_get_attachment_link Есть ли способ получить количество ревизий сообщения? Резервное копирование базы данных и восстановление из резервной копии? Успешная реакция WordPress ajax О временных условиях Action hook save_post для вновь созданных сообщений – данные $ post object все пустые контактная информация 7 коротких кодов базы данных

Связанные записи во всех категориях текущего сообщения (пользовательские типы сообщений)

У моего клиента есть пользовательские типы сообщений, которые они настраивают с помощью плагина, а не определяют их в функции functions.php. (Таким образом, YARPP для решения не будет работать). В этих настраиваемых типах сообщений они имеют разные категории. Каждый пост принадлежит одной или нескольким категориям. После каждого сообщения они хотели бы отобразить 5 сообщений, которые находятся во ВСЕХ одинаковых категориях (может быть одна или много категорий).

Итак, мне нужно сделать способ динамически найти все категории, к которым принадлежит сообщение (я сделал это и настроил его как эхо прямо сейчас, пока не смогу это сделать), а затем запрос, чтобы найти 5 которые принадлежат к тем же категориям (либо они принадлежат всем, либо не должны отображаться).

Вот код, который я придумал, но я не могу понять, как «объединить их», поэтому он не только получает термины (категории), но и заставляет запрос использовать эти термины для фильтрации 5 «связанных» программы.

//get the post's terms (troubleshooting - can be removed once figured out! $category_terms = wp_get_object_terms($post->ID, 'category'); if(!empty($category_terms)){ if(!is_wp_error( $category_terms )){ echo 'Terms <ul>'; foreach($category_terms as $term){ echo '<li><a href="'.get_term_link($term->slug, 'category').'">'.$term->name.'</a></li>'; } echo '</ul>'; } } //get post terms done // get the custom post type's taxonomy terms $custom_taxterms = wp_get_object_terms( $post->ID, 'category', array('fields' => 'ids') ); // arguments $args = array( 'post_type' => 'program_listings', 'post_status' => 'publish', 'posts_per_page' => 5, // you may edit this number 'orderby' => 'rand', 'tax_query' => array( array( 'taxonomy' => 'category', 'field' => 'id', 'terms' => $custom_taxterms ) ), 'post__not_in' => array ($post->ID), ); $related_items = new WP_Query( $args ); // loop over query if ($related_items->have_posts()) : echo '<h2>Other Programs in this category</h2><ul>'; while ( $related_items->have_posts() ) : $related_items->the_post(); ?> <li style="margin-left:10px;list-style:none;"><a href="<?php the_permalink(); ?>" title="<?php the_title_attribute(); ?>"> <?php the_title(); ?></a></li> <?php endwhile; echo '</ul>'; endif; // Reset Post Data wp_reset_postdata(); 

Итак, получите термины posts & echo them (это будет не эхо, когда оно будет закончено – я делаю это, чтобы убедиться, что он действительно получил категории / термины) отлично работает. Он отображает каждую «категорию», в которой находится сообщение. Но второй бит отображает сообщения из любой из этих категорий, а не записи, которые находятся только во ВСЕХ категориях.

В принципе, мне нужно объединить первую и вторую части, чтобы запрос возвращал результаты сообщений, которые находятся во ВСЕХ категориях текущего сообщения. Если сообщение не во всех одинаковых категориях (точное соответствие для ВСЕХ категорий текущего сообщения), оно не должно быть возвращено. (Например, если сообщение находится в родительской категории «Северная Америка», но не в любой другой категории, в которой находится сообщение, оно НЕ должно быть возвращено в результатах).

Solutions Collecting From Web of "Связанные записи во всех категориях текущего сообщения (пользовательские типы сообщений)"

Вы пытались добавить 'operator' в ваш tax_query :

 'tax_query' => array( array( 'taxonomy' => 'category', 'field' => 'id', 'terms' => $custom_taxterms, 'operator' => 'AND' ) ), 

Это код, который необходим для того, чтобы он отображал только сообщения (которые были определенного типа сообщений), которые соответствовали одной и той же дочерней категории (поэтому соответствовали всем другим категориям):

 <!-- other posts --> <?php //this gets the lowest hierarchical child term for current post $categories = get_the_category($post->ID); foreach($categories as $category) : $children = get_categories( array ('parent' => $category->term_id )); $has_children = count($children); if ( $has_children == 0 ) { $current_child = $category->name; } endforeach; //this starts the query for the program listings custom post types $post_type = 'program_listings'; $tax = 'category'; $tax_terms = wp_get_object_terms($post->ID, 'category'); if ($tax_terms == $category_terms) { foreach ($tax_terms as $tax_term) { $args=array( 'post_type' => $post_type, "$tax" => $tax_term->slug, 'post_status' => 'publish', 'operator' => 'AND', 'posts_per_page' => 5,//limits the listing to 5 'caller_get_posts'=> 1, 'post__not_in' => array ($post->ID), 'orderby' => 'ID', //orders by ID, you could also tell it to order by: 'author' 'title''name''date' or 'rand' 'order' => 'ASC', //tells it the display order should be ascending, DSC would indicate a descending order ); $my_query = null; $my_query = new WP_Query($args); if( $my_query->have_posts() && $tax_term->name == $current_child)//now only display categories the current post is in { echo '<h2>Other programs in this category</h2><ul>'; while ($my_query->have_posts() && $tax_term->name==$current_child ) : $my_query->the_post(); ?> <li style="margin-left:15px;list-style:none;"><a href="<?php the_permalink() ?>" rel="bookmark" title="Permanent Link to <?php the_title_attribute(); ?>"><?php the_title(); ?></a></li> <?php endwhile; } wp_reset_query(); } } echo '</ul>'; ?> <!-- end other posts -->