web-dev-qa-db-fra.com

Répertorier tous les messages en type de message personnalisé par taxonomie

Existe-t-il un moyen de répertorier toutes les publications dans un type de publication personnalisé spécifique et de les organiser en fonction du terme de taxonomie personnalisé qui leur est associé?

Par exemple;

Taxonmy Term # 1
Type de poste
Type de poste
Type de poste

Terme de taxonomie n ° 2
Type de poste
Type de poste

Toute aide serait appréciée.

Merci.

22
Dean Elliott

Essaye ça

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

Nous obtenons tous les termes d'une taxonomie, les parcourons et activons un lien de titre vers chaque publication appartenant à ce terme. Si vous devez réorganiser les termes de taxonomie, vous pouvez le faire très facilement avec un plugin. Réorganiser la taxonomie , je crois. Mais faites attention que ce plugin ajoute (!) Une autre colonne à votre table sur activation et ne la supprime pas à la désactivation !

47
GhostToast

Ce n'est pas une solution particulièrement élégante, mais vous pouvez créer plusieurs requêtes pour chacun des termes spécifiques, puis les générer. Espérons que quelqu'un puisse trouver un moyen plus agréable de tirer automatiquement les termes pour modifier la sortie/le tri. Mais cela vous ferait avancer.

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

Joli! La solution de GhostOne était ce que je cherchais. Dans mon cas, le type de message personnalisé était "minining_accidents" et les taxonomies personnalisées associées à ce type étaient des "types d'accident" qui comportaient plusieurs termes. Mon idée était de créer un widget personnalisé pour afficher la liste des publications sous des termes dans cette taxonomie personnalisée. Dans mon essai, il a obtenu ce que je voulais. Le repos était rehaussé. Voici mon 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;
}

Oui! Il y a toujours une option pour améliorer encore le code.

0
Niraj Kumar