web-dev-qa-db-fra.com

Définir une page par défaut pour un type de publication personnalisé

Supposons que je crée un type de message personnalisé appelé "nouveaux projets", avec une fonctionnalité type = page et slug = "projets".

Supposons ensuite que je crée une nouvelle page de type "nouveaux projets" et que je l'appelle "mon nouveau projet". Par défaut, l'URL serait représentée par:

mysite.com/projects/my-new-project/

Cependant, si je veux que la page mon-nouveau-projet soit la page par défaut (comme un index) pour ce type d'article personnalisé, est-ce possible? En d'autres termes, j'aimerais que mysite.com/projects/ charge la page my-new-project .

Si cela est possible, pourrais-je alors ajouter plus de pages de type "nouveaux projets" tout en définissant une de ces pages comme page "par défaut"?

Merci beaucoup, Tathiana

2
Tathiana

Vous pouvez en quelque sorte le simuler avant que la requête principale ne soit exécutée avec l'action pre_get_posts :

function wpa84126_single_project_archive( $query ){
    if( ! is_admin()
        && $query->is_main_query()
        && $query->is_post_type_archive( 'new_projects' ) )
            $query->set( 'name', 'my-new-project' );
}
add_action( 'pre_get_posts', 'wpa84126_single_project_archive' );

Veillez à remplacer new_projects par le nom réel sous lequel vous avez enregistré le type de publication. Il se comportera toujours comme s'il s'agissait de la page d'archive, mais seule cette publication sera interrogée. Vous pouvez enregistrer le slug dans une option afin de pouvoir le changer sans avoir à modifier le code.

1
Milo

Je ne suis pas sûr de suivre entièrement et/ou si c'est le meilleur moyen de le contourner ... mais vous pouvez essayer de créer un modèle de page (une page "normale") et dans le code, vous pouvez modifier la requête pour extraire uniquement dans ce CPT particulier.

  1. Créez un nouveau fichier de modèle de page, page-new-projects.php.

  2. Assurez-vous de nommer correctement le modèle en conséquence (il s'agit d'un exemple):

    <?php 
    /*
     Template Name: New Projects
    */
    ?>
    
  3. Modifiez la boucle du page-new-projects.php pour n'inclure que 'post_type'=> 'new-projects' ( REMARQUE: les types de publication personnalisés ne peuvent pas contenir d'espaces, c'est pourquoi j'ai ajouté le -)

  4. Créez une nouvelle page dans WordPress, intitulée "projets" et assurez-vous de sélectionner le modèle de page New Projects (ou le nom que vous avez utilisé à l'étape 2).

Certes, vous me perdez lorsque vous demandez si vous pouvez ajouter plus de pages de type 'nouveaux projets' et en définir une comme page par défaut, mais peut-être que le modèle de page ci-dessus peut éclairer un peu plus ce que vous voulez faire.


A titre d'exemple, j'imagine que la boucle doit s'exécuter de la manière suivante:

//set the arguments to pass into WP_Query
$args = array('post_type'=>'new-projects');  //This is assuming 'new-projects' is the custom post type
$query = new WP_Query( $args );

// The Loop
while ( $query->have_posts() ) : $query->the_post();
    //do whatever you want to do within the loop
endwhile;

Encore une fois, il pourrait y avoir un meilleur moyen de contourner cela ...

Références:

1) http://codex.wordpress.org/Pages#Creating_Your_Own_Page_Templates

2) http://codex.wordpress.org/Class_Reference/WP_Query

0
Christian Rios

Vous pouvez certainement le faire dans WP. Ce n'est pas très différent d'avoir une page d'index de blog qui affiche le message le plus récent, sauf que dans ce cas, vous voudrez peut-être que ce qui est affiché sur votre page d'index "nouveaux projets" soit un ID de message spécifique. cela ne change pas jusqu'à ce que vous lui disiez de changer plutôt que de changer lorsqu'un nouveau message est publié. Vous pouvez le faire de différentes manières, mais vous devrez probablement baliser le post "en vedette" (c.-à-d. Le post que vous souhaitez afficher sur votre/projets/page) d'une manière ou d'une autre via une catégorie/un tag spécial/unique, ou champ personnalisé. Ce n'est pas vraiment différent pour les types de publication personnalisés que pour les publications de blog classiques: vous utilisez simplement un modèle de page personnalisé qui affiche un (des) type (s) de publication spécifique (s). Vous pouvez également coder en dur l'ID de publication de la publication que vous souhaitez mettre en vedette dans votre modèle d'index "nouveaux projets" (c'est-à-dire le modèle qui génère l'URL/projets /), puis insérer un nouvel ID de publication lorsque vous souhaitez modifier la publication sélectionnée. C’est à vous de décider comment vous voulez limiter le contenu présenté et comment vous souhaitez qu'il soit spécifique (par exemple, votre publication sélectionnée affichée dans/projects/est le dernier projet ajouté à votre type de publication personnalisée "nouveaux projets", puis fonctionnerait exactement de la même manière que l’affichage du billet de blog le plus récent).

Si vous ne souhaitez pas créer de modèle d’index pour votre type de publication personnalisé, vous pouvez modifier votre .htaccess afin de réécrire l’URL pour/projects/pour qu'elle pointe vers/projects/my-new-project/(vous devez le faire manuellement. changez-le à chaque fois que vous souhaitez indiquer un message différent). En fonction de la configuration de votre serveur, votre kilométrage peut varier, mais pour commencer:

<ifmodule mod_rewrite.c>
RewriteEngine on
RewriteBase /
RewriteRule ^projects/$ projects/my-new-project/ [L]
</ifmodule>
0
Tim