Come usare un custom post type come pagina iniziale?

12 ott 2011, 12:29:30
Visualizzazioni: 18.1K
Voti: 6

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?

1
Commenti

Domande/Risposte correlate

kaiser kaiser
30 giu 2014 15:56:55
Tutte le risposte alla domanda 4
1

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

Come utilizzare un CPT come pagina home predefinita?

http://wpquestions.com/question/show/id/2944

12 ott 2011 13:01:15
Commenti

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.

kaiser kaiser
30 giu 2014 15:56:06
0

Il modo più semplice per visualizzare un singolo articolo in prima pagina sarebbe:

global $wp_query;
$wp_query = new WP_Query( array( 'p' => 'ID DEL POST QUI' ) );
include( 'single-TIPODIPOST.php' );
14 ott 2011 16:23:18
1

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

8 lug 2013 19:55:16
Commenti

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

norman.lol norman.lol
1 mag 2016 17:14:04
0
3 ott 2016 17:38:00