Comment utiliser une archive de type publication personnalisée comme page de garde?

12

J'aimerais utiliser une archive de type publication personnalisée comme page de couverture d'un site, afin que

 http://the_site.com/

est une archive de type publication personnalisée affichée en fonction de mon fichier archive-{post-type}.php .

Idéalement, j'aimerais modifier la requête en utilisant is_front_page() dans mon fichier functions.php . J'ai essayé ce qui suit, avec une page intitulée "Accueil" comme page d'accueil:

 add_filter('pre_get_posts', 'my_get_posts');
 function my_get_posts($query){
     global $wp_the_query;
     if(is_front_page()&&$wp_the_query===$query){
        $query->set('post_type','album');
        $query->set('posts_per_page',-1);
     }
     return $query;
 }

mais la page d'accueil renvoie le contenu de "Accueil" et semble ignorer la requête personnalisée.

Qu'est-ce que je fais mal? Y a-t-il un meilleur moyen, généralement, d’agir à ce sujet?

    
posée Isaac Lubow 12.10.2011 - 04:16

5 réponses

26

Une fois que vous avez défini une page statique comme page d'accueil, vous pouvez l'ajouter à votre functions.php et vous pourrez continuer. Ceci appellera également le modèle archive-POSTTYPE.php correctement.

add_action("pre_get_posts", "custom_front_page");
function custom_front_page($wp_query){
    //Ensure this filter isn't applied to the admin area
    if(is_admin()) {
        return;
    }

    if($wp_query->get('page_id') == get_option('page_on_front')):

        $wp_query->set('post_type', 'CUSTOM POST TYPE NAME HERE');
        $wp_query->set('page_id', ''); //Empty

        //Set properties that describe the page to reflect that
        //we aren't really displaying a static page
        $wp_query->is_page = 0;
        $wp_query->is_singular = 0;
        $wp_query->is_post_type_archive = 1;
        $wp_query->is_archive = 1;

    endif;

}
    
réponse donnée Ijaas 12.10.2011 - 05:01
4

Renommez votre archive CPT en home.php

Utilisez ensuite pre_get_posts pour modifier la requête de la page d'accueil afin que seul l'affichage de CPT

function wpsites_home_page_cpt_filter($query) {
if ( !is_admin() && $query->is_main_query() && is_home() ) {
$query->set('post_type', array( 'your-cpt' ) );
    }
  }

add_action('pre_get_posts','wpsites_home_page_cpt_filter');

Remplacez your-cpt par le nom de votre type de publication personnalisée.

    
réponse donnée Brad Dalton 18.08.2014 - 07:03
1

Merci pour la réponse, ljaas: je cherchais à résoudre ce problème précis. Pour pouvoir appeler le modèle d'archive de type publication personnalisé, j'ai dû ajouter les conditions suivantes:

$wp_query->is_post_type_archive = 1;
$wp_query->is_archive = 1;
    
réponse donnée Eli 19.07.2013 - 01:06
0

Cela fonctionne mieux pour moi en remplaçant les articles de blog et la page statique dans Paramètres > Lecture > Affichages page de garde:

<?php
/**
 * Set custom post type archive as front page.
 *
 * @since 1.0.0
 */
function ql_set_as_front_page( $query ) {
    if ( is_admin() || ! $query->is_main_query() ) {
        return;
    }
    if ( ql_is_front_page( $query ) ) {
        $query->set( 'page_id', '' );
        $query->is_page = false;
        $query->is_singular = false;
        $query->set( 'post_type', 'MYCPT' );
        $query->is_archive = true;
        $query->is_post_type_archive = true;
    }
}
add_action( 'pre_get_posts', 'ql_set_as_front_page' );

/**
 * Taken from WP_Query::is_front_page and adapted to compare page_on_front with current page ID.
 * 
 * @since 1.0.0
 * 
 * @param object $query The main WP Query.
 */
function ql_is_front_page( $query ) {
    if ( 'posts' == get_option( 'show_on_front') && $query->is_home() )
        return true;
    elseif ( 'page' == get_option( 'show_on_front') && get_option( 'page_on_front' ) && $query->get('page_id') == get_option( 'page_on_front' ) )
        return true;
    else
        return false;
}

Je l'utilise conjointement avec une substitution de modèle à l'aide des filtres front_page_template et home_template pour renvoyer un modèle personnalisé.

    
réponse donnée Elliot 26.03.2015 - 02:31
0

Pour moi, cela casse la pagination: soit vous sélectionnez l’index, soit une page statique comme page d’accueil, les liens de pagination apparaissent, mais lorsque vous cliquez sur la page 2, vous obtenez:

  • en cas de page d'index (par défaut): la page 404
  • en cas de page statique: les mêmes résultats que la page 1: l’argument "paginé" est alors interprété pour afficher la pagination du type de page, pas la pagination de la liste des types de publication.

Je pense que des règles de réécriture sont nécessaires pour intercepter l'argument paginé et le transmettre correctement.

Quoi qu’il en soit, une page de modèle personnalisée devrait constituer la solution avec quelques règles de réécriture supplémentaires.

    
réponse donnée nderambure 08.09.2015 - 16:04

Lire d'autres questions sur les étiquettes