wake-up-neo.net

Wie verwende ich einen benutzerdefinierten Beitragstyp als Startseite?

Ich möchte festlegen, dass die Startseite einer Website ein einzelner Beitrag eines benutzerdefinierten Beitragstyps ist. Ich konnte die Anforderung für meine Startseite in einen benutzerdefinierten Beitragstyp archive mit folgendem Code ändern (ursprünglich hier gepostet ):

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',''); // empty
        // fix conditional functions
        $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');

Ersetzen

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

mit

$wp_query->is_single = true;

ruft die Vorlage single-album.php auf, wie ich es gerne hätte, gibt jedoch ALLE Posts in der Kategorie "Alben" zurück, anstatt nur einen.

Hinzufügen

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

hat keine Wirkung.

Was soll ich stattdessen tun?

Bonusfrage: Gibt es irgendwo einen guten Hinweis, wie man die query auf diese Weise manipuliert?

5
Isaac Lubow

Die einfachste Möglichkeit, einen einzelnen Beitrag auf der Startseite anzuzeigen, ist:

global $wp_query;
$wp_query = new WP_Query( array( 'p' => 'POST ID HERE' ) );
include( 'single-POSTTYPE.php' );
2
Ijaas

Ich musste dasselbe für einen Kunden tun und habe zwei Ressourcen gefunden, die mir geholfen haben:

Wie verwenden Sie ein CPT als Standard-Homepage?

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

4
dwaser

Dies ist die Lösung, die für mich funktioniert hat:

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

Ersetzen Sie einfach <MYTYPE> durch Ihren benutzerdefinierten Maschinennamen

1
Marco Panichi
1
lkraav