Come usare un custom post type come pagina iniziale?
Vorrei impostare la pagina iniziale di un sito come un singolo post di un custom post type. Sono riuscito a modificare la richiesta per la mia homepage in un archivio di Custom Post Type con il seguente codice (originariamente postato qui):
// Funzione per modificare la query della homepage
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',''); // svuota
// correzione delle funzioni condizionali
$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');
Sostituendo
$wp_query->is_archive = true;
$wp_query->is_post_type_archive = true;
con
$wp_query->is_single = true;
chiama il template single-album.php
come desiderato, ma restituisce TUTTI i post nella categoria "Albums" invece di uno solo.
Aggiungendo
$wp_query->set('posts_per_page',1);
non ha alcun effetto.
Cosa dovrei fare invece?
Domanda bonus: esiste qualche buona referenza su come manipolare la query
in questo modo?

Ho dovuto fare la stessa cosa per un cliente e ho trovato due risorse che mi hanno aiutato:

Le risposte dovrebbero essere più che semplici link. Dovrebbero effettivamente costituire una risposta invece di un percorso dove qualcuno potrebbe forse trovare una soluzione. Aiuta a prevenire il link rot, [modifica] la tua risposta e fornisci le informazioni necessarie che aiutino l'OP così come i visitatori successivi a risolvere il loro problema.

Questa è la soluzione che ha funzionato per me:
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', '<MYTYPE>' );
}
add_action( 'pre_get_posts', 'enable_front_page_<MYTPE>' );
Sostituisci semplicemente <MYTYPE>
con il nome della macchina del tuo custom post type

Non funziona più. Devi eliminare questo secondo argomento $r
. È meglio usare la risposta di Matthew: http://wordpress.stackexchange.com/a/126271/30597

https://wordpress.org/plugins/mpress-custom-front-page/ sembra implementare la logica corretta in modo pulito.
Github https://github.com/wpscholar/mpress-custom-front-page/
