web-dev-qa-db-fra.com

Afficher le type de publication personnalisé d'une catégorie X sur la page d'archive de catégorie X?

J'ai créé un type de message personnalisé "landing_page" pour contenir le contenu que je souhaite afficher en haut des pages d'archives des catégories.

Donc, pour chaque catégorie, j'ai une entrée landing_page étiquetée avec cette catégorie. Que dois-je ajouter au modèle archive.php de la catégorie pour qu'il affiche le contenu de la page de destination de cette catégorie (ou de son terme de taxonomie personnalisé)?

query_posts(
    array( 'posts_per_page' => 1,
    'post_type' => landing_page,
    'category' => [[???]] ));

     while (have_posts()) : the_post();
    the_content();
endwhile;
?>
1
supertrue

Je suggérerais d'ajouter quelque chose comme ceci en haut du fichier de thème ou à n'importe quel endroit où vous souhaitez que ce contenu apparaisse dans les archives, la catégorie ou autre.

// Check if it's a category or taxonomy archive
if( is_category() || is_tax() ) {
    // Grab the queried data, slug, tax, etc..
    $queried = $wp_query->get_queried_object();
    // Check taxonomy and slug are set
    if( isset( $queried->taxonomy ) && isset( $queried->slug ) ) {
        // Look for a landing page post type with a slug that matches the current queried slug
        $landing_page = get_posts( 'name=' . $queried->slug . '&post_type=landing_page&posts_per_page=1&nopaging=1' );
        // If the result wasn't empty
        if( !empty( $landing_page ) ) {
            // Output the title and content using the same filters WP uses in the loop
            echo apply_filters( 'the_title', get_the_title( $landing_page->ID ) );
            echo apply_filters( 'the_content', get_the_content( $landing_page->ID ) );
        }
    }
}

Cela devrait faire ce que vous voulez sans interrompre la requête de catégorie principale pour l’archive.

J'espère que cela pourra aider.

1
t31os

Vous pouvez obtenir la catégorie actuelle avec

et puisque vous utilisez archive.php et non category.php, vérifiez s’il s’agit d’une catégorie en premier, si quelque chose comme ceci:

if (is_category()){
query_posts(
    array( 'posts_per_page' => 1,
    'post_type' => 'landing_page',
    'category' =>  get_query_var('cat'));

     while (have_posts()) : the_post();
        the_content();
     endwhile;

}
0
Bainternet