Cómo usar un tipo de entrada personalizada como página de inicio
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?

Tuve que hacer lo mismo para un cliente y encontré dos recursos que me ayudaron:
¿Cómo usar un CPT (Tipo de contenido personalizado) como página de inicio por defecto?

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.

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

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

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/
