Cum să folosești un custom post type ca pagină principală?

12 oct. 2011, 12:29:30
Vizualizări: 18.1K
Voturi: 6

Aș dori să setez pagina principală a unui site să fie un singur post dintr-un custom post type. Am reușit să modific request-ul pentru pagina mea principală într-o arhivă de Custom Post Type cu următorul cod (original postat aici):

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',''); // gol
        // corectează funcțiile condiționale
        $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');

Înlocuind

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

cu

$wp_query->is_single = true;

apelează template-ul single-album.php cum aș dori, dar în continuare returnează TOATE postările din categoria "Albume", în loc de doar una.

Adăugând

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

nu are niciun efect.

Ce ar trebui să fac în schimb?

Întrebare bonus: există vreo referință bună despre cum să manipulezi query-ul în acest fel?

1
Comentarii

Întrebări/Răspunsuri conexe

kaiser kaiser
30 iun. 2014 15:56:55
Toate răspunsurile la întrebare 4
1

A trebuit să fac același lucru pentru un client și am găsit două resurse care m-au ajutat:

Cum poți folosi un CPT (Custom Post Type) ca pagină principală implicită?

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

12 oct. 2011 13:01:15
Comentarii

Răspunsurile ar trebui să fie mai mult decât simple link-uri. Ele ar trebui să fie de fapt un răspuns, nu o rută unde cineva poate găsi un răspuns. Vă rugăm să ajutați la prevenirea link-urilor moarte, [editați] răspunsul dvs. și furnizați informațiile necesare care să ajute atât pe OP cât și pe vizitatorii ulteriori să rezolve problema lor.

kaiser kaiser
30 iun. 2014 15:56:06
0

Cea mai ușoară metodă de a afișa un singur articol pe pagina principală ar fi:

global $wp_query;
$wp_query = new WP_Query( array( 'p' => 'ID-UL ARTICOLULUI AICI' ) );
include( 'single-TIPULARTICOL.php' );
14 oct. 2011 16:23:18
1

Aceasta este soluția care a funcționat pentru mine:

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>' );

Doar înlocuiți <MYTYPE> cu numele mașină al tipului vostru de postare personalizată

8 iul. 2013 19:55:16
Comentarii

Asta nu mai funcționează. Trebuie să scapi de acest al doilea argument $r. Mai bine folosește răspunsul lui Matthew: http://wordpress.stackexchange.com/a/126271/30597

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

https://wordpress.org/plugins/mpress-custom-front-page/ pare să implementeze logica corectă într-o manieră curată.

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

3 oct. 2016 17:38:00