Elenca tutti i post in base al tipo di post personalizzato in base alla tassonomia


25

Esiste un modo per elencare tutti i post in uno specifico tipo di post personalizzato e disporli in base al termine di tassonomia personalizzato ad essi allegato?

Per esempio;

Taxonmy Termine n. 1
Tipo di
posta Tipo di
posta Tipo di posta

Tassonomia Termine n. 2
Tipo di
posta Tipo di posta

Qualsiasi aiuto sarebbe molto apprezzato.

Grazie.

Risposte:


52

Prova questo

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

Otteniamo tutti i termini di una tassonomia, li attraversiamo e attiviamo un collegamento del titolo a ciascun post che appartiene a quel termine. Se devi riordinare i termini della tassonomia, puoi farlo abbastanza facilmente con un plugin. Riordina la tassonomia , credo. Ma attenzione che questo plugin aggiunge (!) Un'altra colonna alla tua tabella all'attivazione e non la rimuove al momento della disattivazione !


Ciao @GhostToast Funziona benissimo, ho una domanda diretta, come posso filtrare per tassonomia, ho tennis, golf, calcio, voleyball, questo codice li porta tutti con i loro post che hanno la tassonomia controllata, come posso filtrare mostra solo la tassonomia del calcio con i suoi post.
Rodrigo Zuluaga,

@RodrigoZuluaga sarebbe quindi una singola query di base. portare via $custom_termse foreach()semplicemente definire 'terms'manualmente la lumaca o qualunque cosa tu voglia.
GhostToast

Penso che sia un po 'diverso, ma il tuo codice è buono $ args = array (' post_type '=>' publica ',' tax_query '=> array (array (' taxonomy '=>' comision-publicaciones ',' field '= > 'name', 'terms' => array ($ ter_name)),),);
Rodrigo Zuluaga,

1

Non è una soluzione particolarmente elegante, ma è possibile creare più query ciascuna per i termini specifici e quindi inviarli. Speriamo che qualcuno possa trovare un modo migliore di estrarre automaticamente i termini per modificare l'output / l'ordinamento. Ma questo ti farebbe andare avanti.

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

Ben fatto! La soluzione di GhostOne era ciò che stavo cercando. Nella mia situazione, il tipo di post personalizzato era "minining_accidents" e le tassonomie personalizzate associate a questo erano "tipi di incidenti" che contenevano più termini. La mia idea era quella di creare un widget personalizzato per mostrare l'elenco dei post in base a termini in queste tassonomie personalizzate. Nella mia corsa di prova ha ottenuto quello che volevo. Il riposo era aumentato. Ecco il mio codice:

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

Sì! C'è sempre un'opzione per migliorare ulteriormente il codice.


-1

Per mostrare un elenco di post personalizzati da una tassonomia personalizzata

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

Titolo

  • Voce di elenco
  • Voce di elenco
  • Voce di elenco
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.