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?
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' );
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?
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é
https://wordpress.org/plugins/mpress-custom-front-page/ semble mettre en œuvre la logique correcte de manière propre.
Github https://github.com/wpscholar/mpress-custom-front-page/