Comment utiliser une archive de type de publication personnalisée comme page d'accueil?
-
-
is_front_page ()ne fonctionnerapas avecpre_get_postsis_front_page() will not work with pre_get_posts
- 0
- 2014-08-18
- Brad Dalton
-
5 réponses
- votes
-
- 2011-10-12
Après avoir défini unepage statique commepage d'accueil,vouspouvez l'ajouter à votre
functions.php
et vous êtesprêt àpartir.Cela appellera également lemodèlearchive-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; }
After you have set a static page as your home page you can add this to your
functions.php
and you are good to go. This will call thearchive-POSTTYPE.php
template correctly as well.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; }
-
Cettefonction abesoin de `if (is_admin ()) return;` autout début,sinonelleperturbe la zone d'administration.This function needs `if(is_admin()) return;` at the very beginning, otherwise it messes with the admin area.
- 0
- 2013-09-11
- brasofilo
-
Bien que cela aitfonctionnépourmoi,mesmenusprincipauxet secondaires ont disparuen conséquence.While this worked for me, my primary and secondary menus disappeared as result.
- 1
- 2015-04-19
- super9
-
C'estpresque correctement.Ce codeesten train de changertoutes les requêtes wp,il devrait donc êtreif (is_home ()) au lieu deif ($ wp_query->get .....)It's almost correctly. This code is changing all wp_queries, so it should be if ( is_home() ) instead of if ($wp_query->get.....)
- 0
- 2015-06-10
- Leo Caseiro
-
J'utilise lemêmemais surmonmodèle depagepersonnalisé au lieu de lapage d'accueil,et ilne montre aucun résultat (comme si aucun articlepersonnalisén'avait été ajouté).Despensées?I'm using the same but on my custom page template instead of frontpage, and it shows no results (as if no custom posts were added). Any thoughts?
- 0
- 2018-07-22
- trainoasis
-
Cette solutionne prendpasen charge lapagination.Toute URL/page/2 affichetoujours les 10premiersmessages.This solution doesn't support paging. Any /page/2 URL still shows the first 10 posts.
- 0
- 2019-07-19
- rg89
-
Pourprendreen charge lapagination: if ($ query->get ('paged')) {$paged=$ query->get ('paged');} elseif ($ query->get ('page')) {$paged=$ query->get ('page');} else {$paginé=1;} $ query-> set ('paginé',$paginé);To support pagination: if ( $query->get('paged') ) { $paged = $query->get('paged'); } elseif ( $query->get('page') ) { $paged = $query->get('page'); } else { $paged = 1; } $query->set('paged', $paged);
- 1
- 2019-09-26
- Jonathan Nicol
-
- 2014-08-18
Renommez votre archive CPTen home.php
Ensuite,utilisezpre_get_postspourmodifier la requête de lapage d'accueil afin que seul le CPT soit affiché
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 votre-cptpar lenom de votretype demessagepersonnalisé.
Re-name your CPT archive to home.php
Then use pre_get_posts to alter the home page query so only CPT's display
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');
Replace your-cpt with the name of your custom post type.
-
enfin,uneexplication claireet réalisable!finally, a clear, workable explanation!
- 2
- 2015-06-13
- Jack
-
- 2013-07-18
Mercipour la réponse ljaas —je cherchais à résoudreexactement ceproblème.Pour que lemodèle d'archive detype d'articlepersonnalisé soit appelé,j'ai dû ajouter les conditions suivantes:
$wp_query->is_post_type_archive = 1; $wp_query->is_archive = 1;
Thanks for the answer ljaas—I was looking to solve this exact problem. In order to get the custom post type archive template to be called I had to add the following conditions:
$wp_query->is_post_type_archive = 1; $wp_query->is_archive = 1;
-
Salut Eli,bienvenue à WPSE.Les «réponses» sont destinées à répondre à la questioninitiale (les sites stackexchangene sont *pas desforums de discussion avecthreads *).Ce serait unbien meilleur ajustementpour un * commentaire *.Hi Eli, welcome to WPSE. "Answers" are meant to answer the initial question (stackexchange sites are *not threaded discussion forums*). This would be a much better fit for a *comment*.
- 2
- 2013-07-18
- Johannes Pille
-
Mercipour la clarification Johannes.C'est ce queje pensais,même sije nepouvaispas comprendre comment commenter la réponse cariln'y apas defonction «ajouter un commentaire» disponible.Est-ce unefonctionnalité sensible autemps ou suis-je aveugle?Thanks for the clarification Johannes. That is what I thought, though I could not figure out how to comment on the answer as there is no 'add comment' feature available. Is this a time-sensitive feature, or am I blind?
- 0
- 2013-07-20
- Eli
-
- 2015-03-26
Celafonctionnemieuxpourmoien remplaçant à lafois les articles debloget lapage statique dans Paramètres> Lecture> Affichage de lapage d'accueil:
<?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'utiliseen conjonction avec un remplacement demodèleen utilisant lesfiltres
front_page_template
ethome_template
pour renvoyer unmodèlepersonnalisé.This works better for me overriding both blog posts and static page in Settings > Reading > Front page displays:
<?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; }
I'm using it in conjunction with a template override using the filters
front_page_template
andhome_template
to return a custom template. -
- 2015-09-08
Pourmoi,cela casse lapagination: soit vous sélectionnez l'index ou unepage statique commepage d'accueil,les liens depagination apparaissentmaisen cliquant sur lapage 2j'obtiens:
- en cas depage d'index (par défaut): lapage 404
- en cas depage statique: lesmêmes résultats que lapage 1: l'argument "paginé"est alorsinterprétépourmontrer lapagination dutype depage,et non lapagination de la liste destypes d'articles.
Jepense qu'il abesoin de quelques règles de réécriturepour attraper l'argumentpaginéet lepasser correctement.
Quoi qu'ilen soit,unepage demodèlepersonnalisé devrait être la solution avec quelques règles de réécriture supplémentaires.
For me it breaks the pagination : either you select the index or a static page as the home page, the pagination links shows up but when clicking on page 2 I get :
- in case of index page (default) : the 404 page
- in case of static page : the same results as page 1 : the "paged" argument is then interpreted to show the page type pagination, not the post type list pagination.
I think it needs some rewrite rules to catch the paged argument and pass it correctly.
Anyway, a custom template page should be the solution with some additional rewrite rules.
Je voudrais utiliser une archive detype depublicationpersonnalisée commepage d'accueil d'un site,de sorte que
est une archive detype d'articlepersonnalisée affichée selonmonfichier
archive-{post-type}.php
.Idéalement,je voudraismodifier la requêteen utilisant
is_front_page()
dansmonfichierfunctions.php
.J'aiessayé ce qui suit,avec unepageintitulée "Accueil" commepremièrepage:mais lapage d'accueil renvoie le contenu de "Accueil"et sembleignorer la requêtepersonnalisée.
Qu'est-ce queje fais demal?Y a-t-il unemeilleurefaçon,en général,deprocéder?