Список усіх публікацій у користувацькому типі публікацій за систематикою


25

Чи є спосіб я перерахувати всі публікації у певному спеціальному типі публікацій та упорядкувати їх відповідно до доданого до них терміна таксономії?

Наприклад;

Таксонімічний термін №1
Тип допису Тип
повідомлення Пост Тип
повідомлення

Таксономія Термін №2
Тип
повідомлення Тип повідомлення

Будь-яка допомога буде дуже вдячна.

Спасибі.

Відповіді:


52

Спробуйте це

$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;
     }
}

Ми отримуємо всі терміни таксономії, пробираємо їх і запускаємо заголовкове посилання на кожну посаду, що належить до цього терміна. Якщо вам потрібно змінити порядок таксономії, ви можете зробити це за допомогою плагіна досить легко. Я вважаю, що перепорядкуйте таксономію . Але зверніть увагу, що цей плагін додає (!) Ще один стовпець до вашої таблиці під час активації і не видаляє його після деактивації !


Привіт @GhostToast Це чудово працює, у мене пряме запитання, як я можу відфільтрувати це за систематикою, у мене є теніс, гольф, футбол, волейбол, ці коди приносять їх усім своїм постом, який перевірив таксономію, як я можу відфільтрувати показуйте лише Футбольну таксономію зі своїми посадами.
Родріго Зулуага

@RodrigoZuluaga, який би тоді був основним єдиним запитом. віднімати $custom_termsі foreach()і просто визначити 'terms'вручну слимака або що ви хочете.
GhostToast

Я зрозумів, що це дещо інакше, але я вважаю, що ваш код добре $ args = array ('post_type' => 'publica', 'tax_query' => array (array ('taxonomy' => 'comision-publicaciones', 'field' = > 'name', 'terms' => масив ($ ter_name)),),);
Родріго Зулуага

1

Не особливо елегантне рішення, але ви можете створити кілька запитів для кожного конкретного терміна, а потім вивести їх. Сподіваємось, хтось може придумати приємніший спосіб автоматичного витягування термінів, щоб змінити вихід / сортування. Але це змусить вас піти.

<?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;
}

0

Хороший! Рішення GhostOne - це те, що я шукав. У моїй ситуації користувацький тип пошти був "minining_accident", а спеціальні таксономії, пов'язані з цим, були "типами аварій", які мали під собою кілька термінів. Моя ідея полягала в тому, щоб створити спеціальний віджет для показу списку публікацій під термінами в цій спеціальній систематиці. У моєму пробному запуску я отримав те, що хотів. Відпочинок був ялиновий. Ось мій код:

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;
}

Так! Завжди є можливість додаткового вдосконалення коду.


-1

Показати список користувацьких публікацій із власної систематики

$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;
}

Назва

  • Елемент списку
  • Елемент списку
  • Елемент списку
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.