Перечислить все сообщения в произвольном типе сообщений по таксономии
5 ответ
- голосов
-
- 2012-09-25
Попробуй
$custom_terms = get_terms('custom_taxonomy'); foreach($custom_terms as $custom_term) { wp_reset_query(); $args = array('post_type' => 'custom_post_type', 'tax_query' => array( array( 'taxonomy' => 'custom_taxonomy', 'field' => 'slug', 'terms' => $custom_term->slug, ), ), ); $loop = new WP_Query($args); if($loop->have_posts()) { echo '<h2>'.$custom_term->name.'</h2>'; while($loop->have_posts()) : $loop->the_post(); echo '<a href="'.get_permalink().'">'.get_the_title().'</a><br>'; endwhile; } }
Мы получаем все термины таксономии,просматриваем их в цикле и запускаем ссылку в заголовке для каждого сообщения,относящегося к этому термину. Если вам нужно изменить порядок терминов таксономии,вы можете легко сделать это с помощью плагина. Думаю, изменить порядок таксономии . Но обратите внимание,что этот плагин добавляет (!) еще один столбец в вашу таблицу при активации и не удаляет его при деактивации !
Try this
$custom_terms = get_terms('custom_taxonomy'); foreach($custom_terms as $custom_term) { wp_reset_query(); $args = array('post_type' => 'custom_post_type', 'tax_query' => array( array( 'taxonomy' => 'custom_taxonomy', 'field' => 'slug', 'terms' => $custom_term->slug, ), ), ); $loop = new WP_Query($args); if($loop->have_posts()) { echo '<h2>'.$custom_term->name.'</h2>'; while($loop->have_posts()) : $loop->the_post(); echo '<a href="'.get_permalink().'">'.get_the_title().'</a><br>'; endwhile; } }
We get all the terms of a taxonomy, loop through them, and fire off a title link to each post that belongs to that term. If you need to reorder the taxonomy terms, you can do so with a plugin pretty easily. Reorder Taxonomy, I believe. But pay attention that this plugin adds(!) another column to your table on activation and does not remove it upon deactivation!
-
Привет,@GhostToast. Отлично работает,у меня прямой вопрос,как я могу отфильтровать это по таксономии,у меня есть теннис,гольф,футбол,волейбол,эти коды объединяют их все с их сообщениями,у которых проверена таксономия. Как мне отфильтроватьпоказывать только таксономию футбола с ее сообщениями.Hi @GhostToast This works great, I have a direct question, how can I filter this by taxonomy, I have tennis, golf, soccer, voleyball, this codes brings them all with their post that have the taxonomy checked, How can I filter to only show the Soccer Taxonomy with its posts.
- 0
- 2017-03-07
- Rodrigo Zuluaga
-
@RodrigoZuluaga,тогда это будет простой простой запрос.уберите `$ custom_terms` и`foreach () `и просто определите` 'terms' 'вручную для слага или чего угодно.@RodrigoZuluaga that would be a basic single query then. take away `$custom_terms` and the `foreach()` and just define `'terms'` manually to the slug or whatever you want.
- 0
- 2017-03-07
- GhostToast
-
Я думаю,что немного по-другому,но твой код чертовски хорош $ args=array ('post_type'=> 'publica', 'tax_query'=> массив ( массив ( 'taxonomy'=> 'comision-publicaciones', 'field'=> 'name', 'terms'=> массив ($ter_name) ), ), );I got it little different I think but your code hell good $args = array('post_type' => 'publica', 'tax_query' => array( array( 'taxonomy' => 'comision-publicaciones', 'field' => 'name', 'terms' => array($ter_name) ), ), );
- 0
- 2017-03-08
- Rodrigo Zuluaga
-
- 2012-09-25
Не очень элегантное решение,но вы можете создать несколько запросов для каждого конкретного термина и затем вывести их. Надеюсь,кто-нибудь сможет придумать более приятный способ автоматического извлечения терминов для изменения вывода/сортировки. Но это поможет вам.
<?php //First Query for Posts matching term1 $args = array( 'tax_query' => array( array( 'taxonomy' => 'taxonomy_1', 'field' => 'slug', 'terms' => array( 'term1' ) ), ), 'post_type' => 'my-post-type' ); $query = new WP_Query( $args ); if ( have_posts() ) { $term = $query->queried_object; echo 'All posts found in ' . $term->name; while ( have_posts() ) : the_post(); //Output what you want the_title(); the_content(); endwhile; } //RESET YOUR QUERY VARS wp_reset_query(); //Second Query for term2 $args = array( 'tax_query' => array( array( 'taxonomy' => 'taxonomy_1', 'field' => 'slug', 'terms' => array( 'term2' ) ), ), 'post_type' => 'my-post-type' ); $query = new WP_Query( $args ); if ( have_posts() ) { $term = $query->queried_object; echo 'All posts found in ' . $term->name; while ( have_posts() ) : the_post(); //Output what you want the_title(); the_content(); endwhile; }
Not a particularly elegant solution but you can create multiple queries each for the specific terms and then output them. Hopefully someone can come up with a nicer way of automatically pulling the terms to modify the output/sorting. But this would get you going.
<?php //First Query for Posts matching term1 $args = array( 'tax_query' => array( array( 'taxonomy' => 'taxonomy_1', 'field' => 'slug', 'terms' => array( 'term1' ) ), ), 'post_type' => 'my-post-type' ); $query = new WP_Query( $args ); if ( have_posts() ) { $term = $query->queried_object; echo 'All posts found in ' . $term->name; while ( have_posts() ) : the_post(); //Output what you want the_title(); the_content(); endwhile; } //RESET YOUR QUERY VARS wp_reset_query(); //Second Query for term2 $args = array( 'tax_query' => array( array( 'taxonomy' => 'taxonomy_1', 'field' => 'slug', 'terms' => array( 'term2' ) ), ), 'post_type' => 'my-post-type' ); $query = new WP_Query( $args ); if ( have_posts() ) { $term = $query->queried_object; echo 'All posts found in ' . $term->name; while ( have_posts() ) : the_post(); //Output what you want the_title(); the_content(); endwhile; }
-
- 2014-07-10
Замечательно! Решение GhostOne было тем,что я искал. В моей ситуации пользовательский тип сообщения был «minining_accidents»,а пользовательские таксономии,связанные с этим,были «типами происшествий»,в которых было несколько терминов. Моя идея состояла в том,чтобы создать настраиваемый виджет для отображения списка сообщений в рамках терминов в этой настраиваемой таксономии. Во время моего пробного запуска он получил то,что я хотел. Остальное было прилично. Вот мой код:
function fn_get_list_of_mining_accident_types() { $custom_taxonomy='accident-types'; $custom_terms = get_terms($custom_taxonomy); $str_return='<ul>'; foreach($custom_terms as $custom_term) { wp_reset_query(); $args = array( 'post_type' => 'minining_accidents', 'tax_query' => array( array( 'taxonomy' => $custom_taxonomy, 'field' => 'slug', 'terms' => $custom_term->slug, ), ), ); $loop = new WP_Query($args); $term_name=$custom_term->name; $term_slug=$custom_term->slug; $term_link=get_term_link($term_slug, $custom_taxonomy); $str_return.='<li><a href="'.$term_link.'">'.$term_name.'</a>'; if($loop->have_posts()) { $str_return.='<ol>'; while($loop->have_posts()) : $loop->the_post(); $str_return.='<li><a href="'.get_permalink().'">'.get_the_title().'</a></li> '; endwhile; $str_return.='</ol>'; } $str_return.='</li>'; } $str_return.='</ul>'; return $str_return; }
Да! Всегда есть возможность еще больше улучшить код.
Nice one! GhostOne's solution was what I had been looking for. In my situation the custom post type was 'minining_accidents' and custom taxonomies associated with this was 'accident-types' which had multiple terms under it. My idea was to create a custom widget to show list of posts under terms in this custom taxonomies. In my trial run it got what I wanted. Rest was spruce up. Here is my code:
function fn_get_list_of_mining_accident_types() { $custom_taxonomy='accident-types'; $custom_terms = get_terms($custom_taxonomy); $str_return='<ul>'; foreach($custom_terms as $custom_term) { wp_reset_query(); $args = array( 'post_type' => 'minining_accidents', 'tax_query' => array( array( 'taxonomy' => $custom_taxonomy, 'field' => 'slug', 'terms' => $custom_term->slug, ), ), ); $loop = new WP_Query($args); $term_name=$custom_term->name; $term_slug=$custom_term->slug; $term_link=get_term_link($term_slug, $custom_taxonomy); $str_return.='<li><a href="'.$term_link.'">'.$term_name.'</a>'; if($loop->have_posts()) { $str_return.='<ol>'; while($loop->have_posts()) : $loop->the_post(); $str_return.='<li><a href="'.get_permalink().'">'.get_the_title().'</a></li> '; endwhile; $str_return.='</ol>'; } $str_return.='</li>'; } $str_return.='</ul>'; return $str_return; }
Yes! There always is an option to further improve the code.
-
- 2020-06-14
Это долгое решение,которое я пробовал перед тем,как перейти к этой теме. Надеюсь,это поможет кому-то лучше понять.
<?php // Get list of all taxonomy terms -- In simple categories title $args = array( 'taxonomy' => 'project_category', 'orderby' => 'name', 'order' => 'ASC' ); $cats = get_categories($args); // For every Terms of custom taxonomy get their posts by term_id foreach($cats as $cat) { ?> <a href="<?php echo get_category_link( $cat->term_id ) ?>"> <?php echo $cat->name; ?> <br> <?php // echo $cat->term_id; ?> <br> </a> <?php // Query Arguments $args = array( 'post_type' => 'portfolio', // the post type 'tax_query' => array( array( 'taxonomy' => 'project_category', // the custom vocabulary 'field' => 'term_id', // term_id, slug or name (Define by what you want to search the below term) 'terms' => $cat->term_id, // provide the term slugs ), ), ); // The query $the_query = new WP_Query( $args ); // The Loop if ( $the_query->have_posts() ) { echo '<h2> List of posts tagged with this tag </h2>'; echo '<ul>'; $html_list_items = ''; while ( $the_query->have_posts() ) { $the_query->the_post(); $html_list_items .= '<li>'; $html_list_items .= '<a href="' . get_permalink() . '">'; $html_list_items .= get_the_title(); $html_list_items .= '</a>'; $html_list_items .= '</li>'; } echo $html_list_items; echo '</ul>'; } else { // no posts found } wp_reset_postdata(); // reset global $post; ?> <?php } ?>
This is long solution i tried before coming to this thread. Hope this may help someone to understand better.
<?php // Get list of all taxonomy terms -- In simple categories title $args = array( 'taxonomy' => 'project_category', 'orderby' => 'name', 'order' => 'ASC' ); $cats = get_categories($args); // For every Terms of custom taxonomy get their posts by term_id foreach($cats as $cat) { ?> <a href="<?php echo get_category_link( $cat->term_id ) ?>"> <?php echo $cat->name; ?> <br> <?php // echo $cat->term_id; ?> <br> </a> <?php // Query Arguments $args = array( 'post_type' => 'portfolio', // the post type 'tax_query' => array( array( 'taxonomy' => 'project_category', // the custom vocabulary 'field' => 'term_id', // term_id, slug or name (Define by what you want to search the below term) 'terms' => $cat->term_id, // provide the term slugs ), ), ); // The query $the_query = new WP_Query( $args ); // The Loop if ( $the_query->have_posts() ) { echo '<h2> List of posts tagged with this tag </h2>'; echo '<ul>'; $html_list_items = ''; while ( $the_query->have_posts() ) { $the_query->the_post(); $html_list_items .= '<li>'; $html_list_items .= '<a href="' . get_permalink() . '">'; $html_list_items .= get_the_title(); $html_list_items .= '</a>'; $html_list_items .= '</li>'; } echo $html_list_items; echo '</ul>'; } else { // no posts found } wp_reset_postdata(); // reset global $post; ?> <?php } ?>
-
- 2014-07-29
Чтобы показать список настраиваемых сообщений из настраиваемой таксономии
$args = array( 'tax_query' => array( array( 'taxonomy' => 'your-custom-taxonomy', 'field' => 'slug', 'terms' => array( 'your-term' ) ), ), 'post_type' => 'your-post-type' ); $loop = new WP_Query($args); if($loop->have_posts()) { $term = $wp_query->queried_object; while($loop->have_posts()) : $loop->the_post(); //Output what you want echo '<li><a href="'.get_permalink().'">'.get_the_title().'</a></li>'; endwhile; }
Заголовок
- Элемент списка
- Элемент списка
- Элемент списка
To show a list of custom posts from a custom taxonomy
$args = array( 'tax_query' => array( array( 'taxonomy' => 'your-custom-taxonomy', 'field' => 'slug', 'terms' => array( 'your-term' ) ), ), 'post_type' => 'your-post-type' ); $loop = new WP_Query($args); if($loop->have_posts()) { $term = $wp_query->queried_object; while($loop->have_posts()) : $loop->the_post(); //Output what you want echo '<li><a href="'.get_permalink().'">'.get_the_title().'</a></li>'; endwhile; }
Title
- List item
- List item
- List item
Есть ли способ перечислить все сообщения в определенном настраиваемом типе сообщений и упорядочить их по прикрепленному к ним термину настраиваемой таксономии?
Например;
Термин таксономии № 1
Тип сообщения
Тип сообщения
Тип сообщения
Срок таксономии № 2
Тип сообщения
Тип сообщения
Любая помощь будет принята с благодарностью.
Спасибо.