web-dev-qa-db-fra.com

Type de message personnalisé archive comme page de garde

J'ai fondamentalement le même problème que dans cette question , mais la réponse correcte ne fonctionne pas pour moi. Oui, je reçois une liste des publications de mon CPT, mais le archive-{post-type}.php n'est pas utilisé pour restituer la page. Il utilise toujours le index.php. Toute aide est la bienvenue!

Ceci est mon code:

add_action('pre_get_posts', 'my_front_page');
function my_front_page($wp_query) {
  $post_type = 'foobar';

  if ( $wp_query->get('page_id') == get_option('page_on_front') ) {
    $wp_query->set('post_type', $post_type);
    $wp_query->set('page_id', '');

    // Fix conditional functions like is_front_page or is_single
    $wp_query->is_page = 0;
    $wp_query->is_singular = 0;
  }
}
3
Robert Cordes

Pourquoi n'essayez-vous pas d'utiliser un fichier home.php et de placer votre boucle/requête souhaitée dans ce fichier ou d'utiliser alternativement get_template_part pour récupérer un fichier contenant votre boucle.

Pouvez-vous s'il vous plaît nous montrer votre code?

Ce que je fais souvent, c’est structurer mon index.php comme tel,

<?php get_header(); ?>

    <?php if ( is_home() ) {

            get_template_part('home.php');

        } else {

           //run standard/default loop here

        } 
    ?>

<?php get_footer(); ?>

Ensuite, dans home.php, vous pouvez littéralement faire ce que vous voulez,

$args = array( 'posts_per_page' => 10, 'post_type' => 'custom_post_type' );
$wp_query = new WP_Query( $args ); 
while ( $wp_query->have_posts() ) : $wp_query->the_post();
 //get your title, content, tags, etc
endwhile;

Avec cette approche , vous n'êtes PAS obligé de définir une page de couverture statique dans les paramètres de votre tableau de bord dans la section Settings -> Reading -> Front page displays normale.

Remarque: ce n’est pas le seul moyen d’obtenir ce que vous voulez, mais une méthode fiable sans recourir à aucun filtre, si vous n’êtes pas à l’aise ou si vous rencontrez des difficultés (bien sûr sans voir votre code jusqu'à présent).

4
userabuser

Je voudrais essayer ceci: enregistrez votre archive- {custom-post-type}. php as template- {custom-post-type} .php puis postez un commentaire comme ci-dessous dans le fichier avant d'appeler votre en-tête - remplacez le nom du modèle de "CPT" par celui que vous souhaitiez.

Créez maintenant une nouvelle page et utilisez ce fichier de modèle pour afficher le contenu. Ensuite, allez dans vos paramètres -> page de lecture et réglez les écrans de page avant: comme vous nouvelle page

/**
 * Template Name: CPT Archive
 * 
 */
0
dg4220