¿Cómo usar un archivo de tipo de publicación personalizado como portada?

12

Me gustaría utilizar un archivo de tipo de publicación personalizado como página principal de un sitio, para que

 http://the_site.com/

es un archivo de tipo de publicación personalizado que se muestra de acuerdo con mi archivo archive-{post-type}.php .

Idealmente, me gustaría alterar la consulta usando is_front_page() en mi archivo functions.php . Intenté lo siguiente, con una página llamada "Inicio" como mi página principal:

 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;
 }

pero la página de inicio está devolviendo el contenido de "Inicio" y parece estar ignorando la consulta personalizada.

¿Qué estoy haciendo mal? ¿Hay una mejor manera, en general, de hacer esto?

    
pregunta Isaac Lubow 12.10.2011 - 04:16

5 respuestas

26

Una vez que haya establecido una página estática como su página de inicio, puede agregarla a su functions.php y estará listo. Esto también llamará a la plantilla archive-POSTTYPE.php correctamente.

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;

}
    
respondido por el Ijaas 12.10.2011 - 05:01
4

Cambie el nombre de su archivo CPT a home.php

Luego use pre_get_posts para alterar la consulta de la página de inicio de modo que solo se muestre 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');

Reemplaza your-cpt con el nombre de tu tipo de publicación personalizada.

    
respondido por el Brad Dalton 18.08.2014 - 07:03
1

Gracias por la respuesta, ljaas, estaba buscando resolver este problema exacto. Para poder llamar la plantilla de archivo de tipo de publicación personalizada, tuve que agregar las siguientes condiciones:

$wp_query->is_post_type_archive = 1;
$wp_query->is_archive = 1;
    
respondido por el Eli 19.07.2013 - 01:06
0

Esto funciona mejor para mí, reemplazando tanto las publicaciones del blog como la página estática en Configuración > Leyendo > La primera página muestra:

<?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 estoy usando junto con una anulación de plantilla que usa los filtros front_page_template y home_template para devolver una plantilla personalizada.

    
respondido por el Elliot 26.03.2015 - 02:31
0

Para mí, rompe la paginación: o seleccionas el índice o una página estática como la página de inicio, aparecen los enlaces de paginación, pero al hacer clic en la página 2 obtengo:

  • en el caso de la página de índice (predeterminado): la página 404
  • en el caso de una página estática: los mismos resultados que en la página 1: el argumento "paginado" se interpreta para mostrar la paginación de tipo de página, no la paginación de lista de tipo de publicación.

Creo que necesita algunas reglas de reescritura para capturar el argumento paginado y pasarlo correctamente.

De todos modos, una página de plantilla personalizada debe ser la solución con algunas reglas de reescritura adicionales.

    
respondido por el nderambure 08.09.2015 - 16:04

Lea otras preguntas en las etiquetas