web-dev-qa-db-fra.com

Comment utiliser un type de message personnalisé comme page d'accueil?

Je souhaite définir la page d'accueil d'un site comme un message unique à partir d'un type d'article personnalisé. J'ai été en mesure de modifier la demande de ma page d'accueil en un type de message personnalisé archive avec le code suivant (à l'origine posté ici ):

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

Remplacement

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

avec

$wp_query->is_single = true;

appelle le modèle single-album.php comme je le souhaiterais, mais il renvoie toujours TOUS les messages de la catégorie "Albums" au lieu d'un seul.

Ajouter

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

n'a aucun effet.

Que devrais-je faire à la place?

Question bonus: y a-t-il une bonne référence quelque part sur la façon de manipuler le query de cette façon?

5
Isaac Lubow

Le moyen le plus simple d’afficher un article sur la page de couverture serait:

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

Je devais faire la même chose pour un client et j'ai trouvé deux ressources qui m'ont aidé:

Comment utilisez-vous un CPT comme page d'accueil par défaut?

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

4
dwaser

C'est la solution qui a fonctionné pour moi:

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

Il suffit de remplacer <MYTYPE> par votre nom de machine de type message personnalisé

1
Marco Panichi
1
lkraav