web-dev-qa-db-fra.com

WP_Query Obtenir des messages de messages personnalisés par catégorie

je joue avec ça depuis des lustres et pour une raison quelconque, je ne peux pas le faire fonctionner.

Cela provient de la page de message unique d'un type de message personnalisé ...

Fondamentalement, je reçois la catégorie du type de message personnalisé en utilisant get_the_term puis en effectuant un foreach afin de le saisir correctement dans une chaîne.

J'utilise ensuite un WP_Query pour récupérer, mais je pense avoir une mauvaise logique.

C'est ce que j'ai

// post types query
if ( have_posts() ) : while ( have_posts() ) :the_post();

// getting the categories
$categorynames = '';
$getcategory = get_the_terms($post->ID, 'custompostnamehere-categories');

foreach($getcategory as $t){ $categorynames .= $t->term_id.' ,';}

if (substr($categorynames, -1) == ',') {
$categorynames = substr($categorynames, 0, -1);
}

// end of post type query
endwhile; endif; wp_reset_query(); 

//starting new query to get related posts within the same categories
$args = array(
  'post_type' => 'custompostnamehere',
  'cat' => $categorynames,
  'posts_per_page' => 20
);
$q = new WP_Query($args);

// retrieving the data
while($q->have_posts()){

}

Quelqu'un pourrait-il m'éclairer sur mes mauvaises actions?.

Merci

1
Robert

Vous utilisez une requête par catégorie pour votre taxonomie personnalisée. Cela ne fonctionnera donc pas, car il n'y a pas de catégories avec de tels identifiants.

Vous devriez plutôt utiliser tax_query.

// post types query
while ( have_posts() ) {
    the_post();

    // getting the categories
    $categoryIDs = array();  // it's much nicer than concatenated string
    $getcategory = get_the_terms($post->ID, 'custompostnamehere-categories');

    foreach($getcategory as $t) {
        $categoryIDs[] = $t->term_id;
    }

// end of post type query
}
// resetting query isn't needed - you will call your own query next

//starting new query to get related posts within the same categories
$args = array(
    'post_type' => 'custompostnamehere',
    'tax_query' => array(
        array( 
            'taxonomy' => 'yourcustomtaxonomy',
            'field' => 'id',
            'terms' => $categoryIDs
        )
    ),
    'posts_per_page' => 20
);
$q = new WP_Query($args);

// retrieving the data
while( $q->have_posts() ) {
    $q->the_post();
    ...
}
2
Krzysiek Dróżdż