WordPress | Message personnalisé | Afficher le contenu

Publié par Jean-Michel le

J’essaie de créer un thème WordPress qui appelle un type de publication sur mesure.

J’ai créé le type de message via functions.php. Cela semble avoir fonctionné et apparaît dans la zone d’administration et me permet de générer des messages. Extrait de code ci-dessous :

// Register Custom Post Type
function courses_post_type() {
    $labels = array(
        'name'                  => _x( 'Courses', 'Post Type General Name', 'text_domain' ),
        'singular_name'         => _x( 'Course', 'Post Type Singular Name', 'text_domain' ),
        'menu_name'             => __( 'Training Courses', 'text_domain' ),
        'name_admin_bar'        => __( 'Course Type', 'text_domain' ),
        'archives'              => __( 'Course Archives', 'text_domain' ),
        'parent_item_colon'     => __( 'Parent Course:', 'text_domain' ),
        'all_items'             => __( 'All Courses', 'text_domain' ),
        'add_new_item'          => __( 'Add New Course', 'text_domain' ),
        'add_new'               => __( 'New Course', 'text_domain' ),
        'new_item'              => __( 'New Course', 'text_domain' ),
        'edit_item'             => __( 'Edit Course', 'text_domain' ),
        'update_item'           => __( 'Update Course', 'text_domain' ),
        'view_item'             => __( 'View Course', 'text_domain' ),
        'search_items'          => __( 'Search Courses', 'text_domain' ),
        'not_found'             => __( 'No courses found', 'text_domain' ),
        'not_found_in_trash'    => __( 'No courses found in Trash', 'text_domain' ),
        'featured_image'        => __( 'Featured Image', 'text_domain' ),
        'set_featured_image'    => __( 'Set featured image', 'text_domain' ),
        'remove_featured_image' => __( 'Remove featured image', 'text_domain' ),
        'use_featured_image'    => __( 'Use as featured image', 'text_domain' ),
        'insert_into_item'      => __( 'Insert into item', 'text_domain' ),
        'uploaded_to_this_item' => __( 'Uploaded to this item', 'text_domain' ),
        'items_list'            => __( 'Items list', 'text_domain' ),
        'items_list_navigation' => __( 'Items list navigation', 'text_domain' ),
        'filter_items_list'     => __( 'Filter items list', 'text_domain' ),
    );
    $rewrite = array(
        'slug'                  => 'post_type',
        'with_front'            => true,
        'pages'                 => true,
        'feeds'                 => true,
    );
    $args = array(
        'label'                 => __( 'Course', 'text_domain' ),
        'description'           => __( 'Training Course information pages', 'text_domain' ),
        'labels'                => $labels,
        'supports'              => array( 'title', 'editor', 'excerpt', 'thumbnail', 'custom-fields', ),
        'taxonomies'            => array( 'category', 'post_tag' ),
        'hierarchical'          => true,
        'public'                => true,
        'show_ui'               => true,
        'show_in_menu'          => true,
        'menu_position'         => 5,
        'menu_icon'             => 'dashicons-welcome-learn-more',
        'show_in_admin_bar'     => true,
        'show_in_nav_menus'     => true,
        'can_export'            => true,
        'has_archive'           => false,
        'exclude_from_search'   => false,
        'publicly_queryable'    => true,
        'query_var'             => 'course',
        'rewrite'               => $rewrite,
        'capability_type'       => 'page',
    );
    register_post_type( 'courses', $args );

}
add_action( 'init', 'courses_post_type', 0 );

Ma question est de savoir comment faire pour que le contenu de la publication s’affiche dans mon thème personnalisé ?

Je suis actuellement bloqué et rencontre des erreurs. Voici où j’en suis :

J’ai créé un modèle appelé single-course.php et pour l’instant je n’ai rien changé de différent à mon modèle principal.

Cependant, lorsque je vais voir le message dans le navigateur, j’obtiens le message d’erreur :

Désolé, aucun article ne correspond à vos critères.

Dans single-course.php, j’ai placé le code ci-dessous à l’intérieur de l’ <div></div>endroit où je souhaite que le contenu s’affiche.

Si cela aide à visualiser ce que j’essaie de réaliser dans l’ensemble, c’est un type de message personnalisé (dans mon cas, chaque message est un cours de formation) et une page qui affiche chaque message personnalisé individuel. De même, il pourrait s’agir d’une boutique et d’un message personnalisé est un produit où mon single-course.php est censé afficher des informations sur un produit particulier à l’intérieur d’une div réservée à cet effet.

// This div shows the post title using a wordpress php function
<div class="page-title bg-alpha-moderateblue">
<h1 style="margin:0px;"><?php echo get_the_title(); ?></h1>
</div>

//This div should show the post or in my case the training course overview
//From my understading I have to use the loop although I only want to SHOW THE CONTENT OF A PARTICULAR CUSTOM (course) POST.
<div class="page-content bg-white">
<?php

//Define your custom post type name in the arguments

$args = array('post_type' => 'courses');

//Define the loop based on arguments

$loop = new WP_Query( $args );

//Display the contents

while ( $loop->have_posts() ) : $loop->the_post();
?>
<h1 class="entry-title"><?php the_title(); ?></h1>
<div class="entry-content">
<?php the_content(); ?>
</div>
<?php endwhile;?>
</div>

Tous les commentaires et suggestions constructifs sont grandement appréciés, merci d’avance

Solution n°1 trouvée

Problème résolu lors de l’utilisation du générateur de code, je n’avais pas réussi à changer le ‘slug’=> ‘post_type’ par défaut en mon nom de type de publication personnalisé, dans mon cas « courses ».

Solution n°2 trouvée

Je ne sais pas si vous avez écrit vous-même tout ce code (à partir de votre fichier functions.php) ou si vous l’avez récupéré ailleurs, mais je vous recommande d’utiliser l’exemple de code sur https://codex.wordpress.org/Post_Types#Custom_Post_Types avec le moins de personnalisation possible. Vous pouvez également utiliser le code du modèle unique TwentySixteen de WordPress (https://github.com/WordPress/twentysixteen/blob/master/single.php) après tout, qui connaît mieux WordPress que WordPress ? Je ne veux pas dire utiliser le code en production à proprement parler comme point de départ pour vous aider à éliminer la possibilité que l’erreur se trouve dans ces deux blocs de code.

Cela dit, avez-vous essayé de renommer single-course.php en single-courses.php ? Après tout, c’est le nom que vous avez spécifié dans l’appel register_post_type.

J’espère que ça aide, bonne chance !

Solution n°3 trouvée

En passant, si vous utilisez single-courses.php, vous ne devriez pas avoir besoin d’utiliser

<?php

//Define your custom post type name in the arguments

$args = array('post_type' => 'courses');

//Define the loop based on arguments

$loop = new WP_Query( $args );

//Display the contents

while ( $loop->have_posts() ) : $loop->the_post();
?>
<h1 class="entry-title"><?php the_title(); ?></h1>
<div class="entry-content">
<?php the_content(); ?>
</div>
<?php endwhile;?>
</div>

Si le modèle de thème est nommé correctement, vous devriez simplement pouvoir utiliser la boucle et le balisage WordPress standard pour afficher votre contenu.

c’est à dire. pas besoin d’appeler une autre requête.

<?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>

//Content

<?php endwhile; endif; ?>

À moins bien sûr que vous ne modifiiez la requête pour obtenir du contenu connexe dans le single.

Dans ce cas, je suggérerais d’utiliser get_posts(); avec un simple foreach.

$args = array(
  'post_type' = 'courses',
  'posts_per_page' = -1,
);

<?php $related_posts = get_posts($args);

if ( $related_posts ) : ?>

<?php $temp_post = $post; //temporarily store the $post query for use after the related content
foreach ( $related_posts as $post ) : setup_postdata( $post ); ?>

  <h3><?php the_title(); ?></h3>

  <?php the_content(); ?>

<?php endforeach;
$post = $temp_post; //set the post back to the main query
endif; ?>

Codex WordPress pour get_posts

Catégories : Wordpress

Jean-Michel

Jean-Michel est en charge de la partie blog du site. Il met en place la stratégie de contenu et répond aux questions fréquentes sur Wordpress.

0 commentaire

Laisser un commentaire

Avatar placeholder

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *