web-dev-qa-db-fra.com

Comment mettre des types de publication personnalisés sur la première page

J'essaie de créer un portefeuille avec WordPress en utilisant un type de message personnalisé pour afficher mes projets. Chaque projet que je souhaite afficher sur ma page d'accueil statique avec une image sélectionnée sous forme de vignette et en cliquant sur une vignette me mènerait directement au projet.

Comment puis-je publier des types de publication personnalisés sur la page d'accueil statique? Je souhaite afficher uniquement les 6 derniers messages, puis j'aurais un lien vers le reste via ma navigation.

1
Xero1

Donc, si vous avez enregistré un CPT appelé wpse_242473_custom_post_type, vous pouvez l'utiliser pour mettre 6 publications récentes de ce type sur votre page d'accueil statique (ou ailleurs). Vous pouvez utiliser un shortcode ou une balise de modèle et la fonction devrait fonctionner pour les deux.

C'est une modification de code que j'utilise dans beaucoup de sites. Mettez-le dans le functions.php de votre thème. Modifiez le code HTML que j'ai utilisé à votre guise, bien sûr.

J'ai ajouté une touche que je voulais essayer depuis un moment, alors si ça vous étouffe, faites-le moi savoir et je le testerai correctement. Ce que j’ai ajouté, c’est un ensemble complet d’arguments facultatifs qui permettent à la même fonction de fonctionner, j’espère, pour un shortcode et une balise de modèle. Vous pouvez insérer [recentposts] dans l'éditeur visuel de n'importe quelle page ou <?php wpse_242473_recent_posts(); ?> dans n'importe quel modèle de votre thème.

Pour le mettre dans le modèle de votre page de garde statique, modifiez (ou créez) le modèle front-page.php. Celle-ci sera automatiquement sélectionnée pour votre page de garde statique, sans que vous ayez à la sélectionner dans l'écran de modification de page.

function wpse_242473_recent_posts( $atts = null, $content = null, $tag = null ) {

    $out = '';

    $args = array( 
        'numberposts' => '6', 
        'post_status' => 'publish', 
        'post_type' => 'wpse_242473_custom_post_type' ,
    );

    $recent = wp_get_recent_posts( $args );

    if ( $recent ) {

        $out .= '<section class="overview">';

        $out .= '<h1>Recent Projects</h1>';

        $out .= '<div class="overview">';

        foreach ( $recent as $item ) {

            $out .= '<a href="' . get_permalink( $item['ID'] ) . '">';
            $out .= get_the_post_thumbnail( $item['ID'] ); 
            $out .= '</a>';
        }

        $out .= '</div></section>';
    }

    if ( $tag ) {
        return $out;
    } else {
        echo $out;
    }

}

add_shortcode( 'recentposts', 'wpse_242473_recent_posts' );

C'est une récupération simple des messages que vous voulez.

La boucle foreach construit votre code HTML, puis la condition à la fin renvoie le code HTML, si vous avez utilisé un shortcode, ou l’échange si vous appelez la fonction en tant que balise de modèle.

Ce que beaucoup d'articles sur le Web ne vous montrent pas, c'est le troisième argument transmis à tous les gestionnaires de codes courts. Lorsque vous utilisez le shortcode, il contient le nom du shortcode, de sorte qu'un gestionnaire peut en théorie gérer plusieurs shortcodes. Dans ce cas, nous l'utilisons pour indiquer si la fonction a bien été appelée en tant que gestionnaire de shortcode ou non.

1

Modifier: Cette réponse a été écrite avant que je réalise que le PO a une page de garde statique. Je l'ai laissé ici au cas où cela serait utile à quelqu'un d'autre et j'ai ajouté une deuxième réponse pour la casse de page de garde statique.

Cela ajoutera votre type de message personnalisé à la boucle principale de la page d'accueil:

add_action( 'pre_get_posts', 'wpse_242473_add_post_type_to_home' );

function wpse_242473_add_post_type_to_home( $query ) {

    if( $query->is_main_query() && $query->is_home() ) {
        $query->set( 'post_type', array( 'post', 'your_custom_post_type_here') );
    }
}

Le fait de cocher is_home permet de s’assurer que la page principale du blog est "home" et que is_main_query évite d’affecter par inadvertance les boucles secondaires.

Si vous souhaitez uniquement votre type de publication personnalisé et non les publications ordinaires, supprimez post du tableau des types de publication.

Certains articles incorrects sur le Web traitent cette action en tant que filtre. Ce n'est pas, il passe la requête par référence afin que vous puissiez définir directement les arguments de la requête.

3

Vous pouvez suivre les étapes suivantes:
1) Créez un modèle de votre CPT (type de message personnalisé)
2) Placez les codes suivants dans ce modèle; remplacez CPT par votre CPT.
3) Ouvrez une nouvelle page et publiez une nouvelle page en sélectionnant ce modèle dans la partie droite.
4) Enfin, allez au réglage, cliquez sur lecture, puis sélectionnez la page de couverture sous Une page statique.

Codes:

<?php
/**
 *Template Name:CPT
 * @package CPT 
 * @since CPT  1.0
 */ 
get_header(); 

global $paged;  
    if( get_query_var( 'paged' ) ) {
        $paged = get_query_var( 'paged' );
    } elseif( get_query_var( 'page' ) ) {
        $paged = get_query_var( 'page' );
    } else {
        $paged = 1;
    }

    $args = array(
        'post_type'     => 'CPT',
        'posts_per_page'=>6,
        'paged'         => $paged,
    );

    $query = new WP_Query($args);
?>

<?php if ( $blog_query->have_posts() ) : ?>
                            <?php while ( $query->have_posts() ) : $query->the_post(); ?>
                                <div class="post-thumbnail">
                                      <?php if (  (function_exists('has_post_thumbnail')) && (has_post_thumbnail())  ) {?>
                                          <a href="<?php the_permalink(); ?>" title="<?php the_title_attribute(); ?>">
                                           <?php the_post_thumbnail(); ?>  
                                          </a>
                                        <?php }
                                      ?>
                                </div>

                            <?php endwhile; ?>
<?php endif; ?>

<?php get_footer(); ?>
0
bdtheme