web-dev-qa-db-fra.com

Grouper les publications personnalisées par noms de taxonomie personnalisés

J'essaie d'afficher une liste de messages personnalisés regroupés par catégories à l'aide d'une solution de ici (la 1ère option/exemple). J'ai adapté le code seulement un peu à mes besoins, mais il gèle mon installation/blog (obtention d'un affichage blanc si ce n'est pas commenté), à cause de cette ligne (comme il me semble): $term_ids = array_map(function($t) { return $t->term_id, }, $terms);. J'ai trouvé cela en commentant des parties du code. Qu'est-ce qui va pas avec ça?

Mon code complet:

function yesterday_events2() {

    $terms = get_terms( 'event-categories' );

    $term_ids = array_map( function( $t ) { return $t->term_id }, $terms );

    $posts = get_posts(
        array(
            'nopaging'  => true,
            'tax_query' => array(
                array(
                    'taxonomy' => 'event-categories',
                    'field'    => 'id',
                    'terms'    => $term_ids,
            ) ),
    ) );

    foreach( $terms as $t ) {
        $posts_in_term = array_filter( $posts, function( $p ) use ( $t ) {
            // has_term likely triggers a DB hit...
            return has_term( $t->term_id, 'event-categories', $p );
        } );

        // do stuff with $posts_in_term 
    }

}
1
Iurie Malai

Vous devriez l'écrire comme suit:

$term_ids = array_map( function( $t ) { return $t->term_id ; }, $terms );

Également dans le code, vous avez le get_terms où vous écrivez directement le nom de taxonomie. Cela a été déconseillé en faveur de ce qui suit:

$terms = get_terms( array(
    'taxonomy' => 'event-categories',
    'hide_empty' => false,
) );

Depuis la version 4.5.0, les taxonomies doivent être passées via l’argument ‘taxonomy’ dans le tableau $ args:

Deuxième question

Pourquoi avez-vous un message vide?

Vous recherchez par défaut dans les publications avec post_type = post.

Vous devriez rechercher votre post_type personnalisé comme ceci:

$posts = get_posts(
    array(
        'post_type' => 'custom_post_type',
        'nopaging'  => true,
        'tax_query' => array(
            array(
                'taxonomy' => 'event-categories',
                'terms'    => $term_ids ,
        ) ),
) );

J'ai supprimé le 'field' => 'id' car, par défaut, il obtient le term_id et les valeurs acceptées sont les suivantes:

  • 'term_id'
  • 'prénom'
  • 'limace'
  • 'term_taxonomy_id'
2
Drupalizeme