Cómo usar un tipo de entrada personalizada como página de inicio

12 oct 2011, 12:29:30
Vistas: 18.1K
Votos: 6

Quiero configurar la página de inicio de un sitio para que sea una publicación individual de un tipo de entrada personalizada. He podido modificar la solicitud para que mi página de inicio sea un archivo de Tipo de Entrada Personalizada con el siguiente código (originalmente publicado aquí):

function custom_front_page($wp_query){
    if($wp_query->get('page_id')==get_option('page_on_front')){
        $wp_query->set('post_type','album');
        $wp_query->set('page_id',''); // vacío
        // corregir funciones condicionales
        $wp_query->is_page = false;
        $wp_query->is_archive = true;
        $wp_query->is_post_type_archive = true;
    }
}
add_action('pre_get_posts','custom_front_page');

Reemplazando

$wp_query->is_archive = true;
$wp_query->is_post_type_archive = true; 

con

$wp_query->is_single = true;

llama a la plantilla single-album.php como quiero, pero aún devuelve TODAS las publicaciones en la categoría "Álbumes", en lugar de solo una.

Agregar

$wp_query->set('posts_per_page',1);

no tiene efecto.

¿Qué debería hacer en su lugar?

Pregunta adicional: ¿existe alguna buena referencia sobre cómo manipular la query de esta manera?

1
Comentarios

Preguntas/Respuestas relacionadas

kaiser kaiser
30 jun 2014 15:56:55
Todas las respuestas a la pregunta 4
1
12 oct 2011 13:01:15
Comentarios

Las respuestas deben ser más que simples enlaces. Deben ser realmente una respuesta en lugar de una ruta donde alguien quizás encuentre una respuesta. Por favor ayuda a prevenir enlaces rotos, [edita] tu respuesta y proporciona la información necesaria que ayude al OP así como a visitantes posteriores a resolver su problema.

kaiser kaiser
30 jun 2014 15:56:06
0

La forma más fácil de mostrar una sola publicación en la página principal sería:

global $wp_query;
$wp_query = new WP_Query( array( 'p' => 'ID DE LA PUBLICACIÓN AQUÍ' ) );
include( 'single-TIPODEPUBLICACIÓN.php' );
14 oct 2011 16:23:18
1

Esta es la solución que funcionó para mí:

function add_<MYTPE>_to_dropdown( $pages, $r )
{
    if('page_on_front' == $r['name'])
    {
        $args = array(
            'post_type' => '<MYTYPE>'
        );
        $items = get_posts($args);
        $pages = array_merge($pages, $items);
    }

    return $pages;
}
add_filter( 'get_pages', 'add_<MYTPE>_to_dropdown' );

function enable_front_page_<MYTPE>( $query )
{
    if('' == $query->query_vars['post_type'] && 0 != $query->query_vars['page_id'])
        $query->query_vars['post_type'] = array( 'page', '<MYTPE>' );
}
add_action( 'pre_get_posts', 'enable_front_page_<MYTPE>' );

Solo reemplaza <MYTYPE> con el nombre técnico de tu tipo de entrada personalizado

8 jul 2013 19:55:16
Comentarios

Eso ya no funciona. Necesitas eliminar este segundo argumento $r. Mejor usa la respuesta de Matthew: http://wordpress.stackexchange.com/a/126271/30597

norman.lol norman.lol
1 may 2016 17:14:04
0

https://wordpress.org/plugins/mpress-custom-front-page/ parece estar implementando la lógica correcta de manera limpia.

Github https://github.com/wpscholar/mpress-custom-front-page/

3 oct 2016 17:38:00