Come utilizzare un archivio di tipo di post personalizzato come prima pagina?
-
-
is_front_page ()nonfunzionerà conpre_get_postsis_front_page() will not work with pre_get_posts
- 0
- 2014-08-18
- Brad Dalton
-
5 risposta
- voti
-
- 2011-10-12
Dopo averimpostato unapagina statica come homepage,puoi aggiungerla altuo
functions.php
e sei aposto.Questo chiamerà correttamente ancheilmodelloarchive-POSTTYPE.php
.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; }
-
Questafunzione habisogno di `if (is_admin ()) return;` all'inizio,altrimenti creaproblemi con l'area di amministrazione.This function needs `if(is_admin()) return;` at the very beginning, otherwise it messes with the admin area.
- 0
- 2013-09-11
- brasofilo
-
Mentre questo hafunzionatoperme,i mieimenuprincipalee secondario sono scomparsi come risultato.While this worked for me, my primary and secondary menus disappeared as result.
- 1
- 2015-04-19
- super9
-
È quasi corretto.Questo codice sta cambiandotutte le wp_queries,quindi dovrebbeessereif (is_home ())invece diif ($ 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
-
Sto usando lo stessoma sulmiomodello dipaginapersonalizzato anzichéin primapaginae nonmostra risultati (come senonfossero stati aggiuntipostpersonalizzati).qualcheidea?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
-
Questa soluzionenon supportailpaging.Qualsiasi URL/page/2mostra ancorai primi 10post.This solution doesn't support paging. Any /page/2 URL still shows the first 10 posts.
- 0
- 2019-07-19
- rg89
-
Per supportare l'impaginazione: if ($ query->get ('paged')) {$paged=$ query->get ('paged');} elseif ($ query->get ('page')) {$paged=$ query->get ('page');} altro {$paged=1;} $ query-> set ('paged',$paged);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
Rinominailtuo archivio CPTin home.php
Quindi utilizzapre_get_postspermodificare la query della homepagein modo che venga visualizzata solo la 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');
Sostituisci your-cpt conilnome deltipo dipostpersonalizzato.
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.
-
finalmente una spiegazione chiarae realizzabile!finally, a clear, workable explanation!
- 2
- 2015-06-13
- Jack
-
- 2013-07-18
Grazieper la risposta ljaas: stavo cercando di risolvereesattamente questoproblema.Per richiamareilmodello di archivio deltipo dipostpersonalizzato,ho dovuto aggiungere le seguenti condizioni:
$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;
-
Ciao Eli,benvenutoin WPSE.Le "risposte" hanno lo scopo di rispondere alla domandainiziale (i siti di stackexchange *non sonoforum di discussionein thread *).Questo sarebbemoltopiù adattoper un * commento *.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
-
Grazieperil chiarimento Johannes.Questo è quello che hopensato,anche senon sono riuscito a capire come commentare la rispostapoichénon è disponibile lafunzione "aggiungi commento".È unafunzione sensibile altempo o sono cieco?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
Funzionameglioperme sovrascrivendo siai post delblog che lapagina staticain Impostazioni> Lettura> Visualizzazione dellaprimapagina:
<?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; }
Lo sto utilizzandoinsieme a unmodello di sostituzione utilizzandoi filtri
front_page_template
ehome_template
per restituire unmodellopersonalizzato.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
Perme interrompe l'impaginazione: o selezioni l'indice o unapagina statica come homepage,vengono visualizzatii collegamenti dell'impaginazionema quando sifa clic sullapagina 2 ottengo:
- in caso dipaginaindice (impostazionepredefinita): lapagina 404
- in caso dipagina statica:gli stessi risultati dellapagina 1: l'argomento "paginato" viene quindiinterpretatopermostrare l'impaginazione deltipo dipagina,non quella dell'elenco deltipo di articolo.
Penso che sianonecessarie alcune regole di riscritturaper catturare l'argomentoimpaginatoe passarlo correttamente.
Ad ognimodo,unapaginamodellopersonalizzato dovrebbeessere la soluzione con alcune regole di riscrittura aggiuntive.
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.
Vorrei utilizzare un archivio ditipi dipostpersonalizzato comeprimapagina del sito,in modo che
è un archivio ditipo dipostpersonalizzato visualizzatoin base almiofile
archive-{post-type}.php
.Idealmente vorreimodificare la query utilizzando
is_front_page()
nelmiofilefunctions.php
.Hoprovato quanto segue,con unapagina chiamata "Home" comeprimapagina:ma laprimapagina restituisceil contenuto di "Home"e sembraignorare la querypersonalizzata.
Cosa stofacendo di sbagliato?C'è unmodomigliore,in generale,perfarlo?