¿Cómo usar un archivo de tipo de publicación personalizado como página principal?
-
-
is_front_page ()nofuncionará conpre_get_postsis_front_page() will not work with pre_get_posts
- 0
- 2014-08-18
- Brad Dalton
-
5 respuestas
- votos
-
- 2011-10-12
Una vez que hayaestablecido unapáginaestática como supágina deinicio,puede agregarla a su
functions.php
yestará listo.Estotambién llamará correctamente a laplantillaarchive-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; }
-
Estafunciónnecesita `if (is_admin ()) return;` alprincipio,de lo contrariointerfiere conel área de administración.This function needs `if(is_admin()) return;` at the very beginning, otherwise it messes with the admin area.
- 0
- 2013-09-11
- brasofilo
-
Sibien estofuncionóparamí,mismenúsprimario y secundario desaparecieron como resultado.While this worked for me, my primary and secondary menus disappeared as result.
- 1
- 2015-04-19
- super9
-
Es casi correcto.Este códigoestá cambiandotodas las wp_queries,por lo que debería serif (is_home ())en lugar 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
-
Estoy usando lomismoperoen miplantilla depáginapersonalizadaen lugar de lapáginaprincipal,ynomuestra resultados (como sino se hubieran agregadopublicacionespersonalizadas).¿Algunaidea?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
-
Esta soluciónno admite lapaginación.Cualquier URL/página/2todavíamuestra lasprimeras 10publicaciones.This solution doesn't support paging. Any /page/2 URL still shows the first 10 posts.
- 0
- 2019-07-19
- rg89
-
Para apoyar lapaginación: if ($ query->get ('paged')) {$paged=$ query->get ('paged');} elseif ($ consulta->get ('página')) {$paginado=$ consulta->get ('página');} else {$paged=1;} $ consulta-> set ('paginado',$paginado);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
Cambieelnombre de su archivo CPT a home.php
Luego,usepre_get_postsparamodificar la consulta de lapágina deinicio demodo que solo semuestre 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');
Reemplace your-cpt conelnombre de sutipo depublicaciónpersonalizada.
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,unaexplicación clara y viable.finally, a clear, workable explanation!
- 2
- 2015-06-13
- Jack
-
- 2013-07-18
Graciaspor la respuesta ljaas:estababuscando resolveresteproblemaexacto.Parapoder llamar a laplantilla de archivo detipo depublicaciónpersonalizada,tuve que agregar las siguientes condiciones:
$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;
-
Hola Eli,bienvenido a WPSE.Las "respuestas"están destinadas a responder lapreguntainicial (los sitios de stackexchange *no sonforos de discusión con hilos *).Estoencajaríamuchomejoren un * comentario *.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
-
Graciaspor la aclaración Johannes.Esoes lo quepensé,aunquenopude averiguar cómo comentar la respuesta ya queno hay unafunción de 'agregar comentario' disponible.¿Esesta unafunción urgente oestoy ciego?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
Estofuncionamejorparamí anulandotanto laspublicaciones delblog como lapáginaestáticaen Configuración> Lectura> Pantallas de lapáginaprincipal:
<?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; }
Loestoy usandojunto con una anulación deplantilla usando losfiltros
front_page_template
yhome_template
para devolver unaplantillapersonalizada.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
Paramí,rompe lapaginación: o seleccionasel índice o unapáginaestática comopágina deinicio,aparecen losenlaces depaginaciónpero al hacer clicen lapágina 2 obtengo:
- en el caso de lapágina de índice (predeterminado): lapágina 404
- en el caso de unapáginaestática: losmismos resultados queen lapágina 1:el argumento "paginado" seinterpretaparamostrar lapaginación deltipo depágina,no lapaginación de la lista deltipo depublicación.
Creo que senecesitan algunas reglas de reescriturapara capturarel argumentopaginado ypasarlo correctamente.
Detodosmodos,unapágina deplantillapersonalizada debería ser la solución con algunas reglas de reescritura adicionales.
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.
Megustaría usar un archivo detipo depublicaciónpersonalizado comopáginaprincipal de un sitio,para que
es un archivo detipo depublicaciónpersonalizado que semuestra de acuerdo conmi archivo
archive-{post-type}.php
.Idealmente,me gustaríamodificar la consulta usando
is_front_page()
en mi archivofunctions.php
.Intenté lo siguiente,con unapágina llamada "Inicio" comomi páginaprincipal:pero lapáginaprincipalmuestrael contenido de "Inicio" ypareceignorar la consultapersonalizada.
¿Quéestoy haciendomal?¿Existe unamejormanera,en general,de haceresto?