web-dev-qa-db-fra.com

Inclure une page spécifique dans votre modèle

Comment inclure des pages spécifiques dans un modèle?

Comme par exemple sur la page principale de mes sites Web, je souhaite disposer de 3 zones de contenu différentes que le client peut mettre à jour régulièrement à sa guise. Je pense que la meilleure façon de faire est de simplement imbriquer des pages dans le modèle et qu'il puisse éditer la page.

Comment puis-je configurer cela? Le codex wordpress, le forum wordpress et google ont tous échoué à me donner n'importe quelle solution.

Je sais qu'il existe un plugin qui permet cela, mais que ce n'est pas compatible avec 3.1 et supérieur. De toute façon, je n’aime pas l’idée d’utiliser un plugin, j’ai pensé que wordpress aurait une configuration simple du système de balises de gabarit pour cela, faux .... PHP est probablement là où se trouve la réponse.

Merci de votre aide

p.s. Si vous connaissez une meilleure façon de procéder que d'utiliser des pages imbriquées, merci de me le faire savoir. Je ne suis qu'un wordpress noob et je me suis dit que ce serait un moyen simple d'accomplir cette tâche.

1
randyttp

Profiter de WordPress des types de publications personnalisées est un autre excellent moyen de réaliser quelque chose comme celui-ci.

Vous pouvez configurer 3 types de fonctionnalités pour une utilisation facile dans le back-end WordPress.

Commencez par configurer les types de publication personnalisés.

Pour ce faire, ouvrez le fichier functions.php de votre thème et incluez quelque chose comme ceci:

<?php
function custom_register_post_types() {
    $labels = array(
        'name' => _x('People', 'post type general name'),
        'singular_name' => _x('Person', 'post type singular name'),
        'add_new' => __('Add New'),
        'add_new_item' => __('Add New Person'),
        'edit_item' => __('Edit Person'),
        'new_item' => __('New Person'),
        'view_item' => __('View Person'),
        'search_items' => __('Search People'),
        'not_found' => __('No People found'),
        'not_found_in_trash' => __('No People found in Trash'),
        'menu_name' => 'People'
    );
    $rewrite = array(
        'slug' => 'people'
    );
    $supports = array('title','editor');
    $args = array(
        'labels' => $labels,
        'public' => true,
        'show_in_menu' => true,
        'query_var' => 'people',
        'rewrite' => $rewrite,
        'has_archive' => true,
        'hierarchical' => false,
        'supports' => $supports
    );
    register_post_type('people',$args);
    $labels = array(
        'name' => _x('Places', 'post type general name'),
        'singular_name' => _x('Place', 'post type singular name'),
        'add_new' => __('Add New'),
        'add_new_item' => __('Add New Place'),
        'edit_item' => __('Edit Place'),
        'new_item' => __('New Place'),
        'view_item' => __('View Place'),
        'search_items' => __('Search Places'),
        'not_found' => __('No Places found'),
        'not_found_in_trash' => __('No Places found in Trash'),
        'menu_name' => 'Places'
    );
    $rewrite = array(
        'slug' => 'places'
    );
    $supports = array('title','editor');
    $args = array(
        'labels' => $labels,
        'public' => true,
        'show_in_menu' => true,
        'query_var' => 'places',
        'rewrite' => $rewrite,
        'has_archive' => true,
        'hierarchical' => false,
        'supports' => $supports
    );
    register_post_type('places',$args);
    $labels = array(
        'name' => _x('Things', 'post type general name'),
        'singular_name' => _x('Thing', 'post type singular name'),
        'add_new' => __('Add New'),
        'add_new_item' => __('Add New Thing'),
        'edit_item' => __('Edit Thing'),
        'new_item' => __('New Thing'),
        'view_item' => __('View Thing'),
        'search_items' => __('Search Things'),
        'not_found' => __('No Things found'),
        'not_found_in_trash' => __('No Things found in Trash'),
        'menu_name' => 'Things'
    );
    $rewrite = array(
        'slug' => 'things'
    );
    $supports = array('title','editor');
    $args = array(
        'labels' => $labels,
        'public' => true,
        'show_in_menu' => true,
        'query_var' => 'things',
        'rewrite' => $rewrite,
        'has_archive' => true,
        'hierarchical' => false,
        'supports' => $supports
    );
    register_post_type('things',$args);
}
add_action('init', 'custom_register_post_types', 0);
?>

J'ai écrit une référence sur les spécificités de ce qui se passe avec ce code ici . Vous pouvez également vous renseigner sur le codex .

Cela va créer 3 nouveaux menus dans la navigation de gauche à gauche de WordPress, en donnant à chacun de ces types son propre espace dans l'interface. Dans ce cas, les gens, les lieux et les choses. (personnalisez logiquement en fonction de vos besoins) Pour l'instant, ils sont configurés pour afficher uniquement une barre de titre et un volet Editeur.

Interrogez les types de publication à utiliser sur votre page d'accueil.

J'aime mettre en place de nouveaux objets de requête afin de tout garder bien séparé. De plus, vous pouvez appeler les objets dans et hors d’autres boucles, ce qui peut parfois être pratique. Mélangez ces éléments (ou un élément personnalisé en fonction de vos besoins) dans vos modèles pour les intégrer aux pages souhaitées.

<?php
$args = array( 'post_type' => 'people', 'numberposts' => '1' );
$people = new WP_Query($args);
if ( $people->have_posts() ) : 
    while ( $people->have_posts() ) : 
        $people->the_post(); 
        global $more;
        $more = 0;
?>

<div id="people-<?php the_ID(); ?>" <?php post_class(); ?>>
    <div class="post-entry">
        <div class="post-title">
            <h3><a href="<?php the_permalink(); ?>" title="<?php the_title_attribute(); ?>"><?php the_title(); ?></a></h3>
        </div>
        <div class="post-content">
            <?php edit_post_link( 'Edit', '<h5 class="edit-link">', '</h5>' ); ?>
            <?php the_content(); ?>
        </div>
    </div>
</div>

<?php
    endwhile;
endif;
wp_reset_query();
?>

<?php
$args = array( 'post_type' => 'places', 'numberposts' => '1' );
$places = new WP_Query($args);
if ( $places->have_posts() ) : 
    while ( $places->have_posts() ) : 
        $places->the_post(); 
        global $more;
        $more = 0;
?>

<div id="places-<?php the_ID(); ?>" <?php post_class(); ?>>
    <div class="post-entry">
        <div class="post-title">
            <h3><a href="<?php the_permalink(); ?>" title="<?php the_title_attribute(); ?>"><?php the_title(); ?></a></h3>
        </div>
        <div class="post-content">
            <?php edit_post_link( 'Edit', '<h5 class="edit-link">', '</h5>' ); ?>
            <?php the_content(); ?>
        </div>
    </div>
</div>

<?php
    endwhile;
endif;
wp_reset_query();
?>

<?php
$args = array( 'post_type' => 'things', 'numberposts' => '1' );
$things = new WP_Query($args);
if ( $things->have_posts() ) : 
    while ( $things->have_posts() ) : 
        $things->the_post(); 
        global $more;
        $more = 0;
?>

<div id="things-<?php the_ID(); ?>" <?php post_class(); ?>>
    <div class="post-entry">
        <div class="post-title">
            <h3><a href="<?php the_permalink(); ?>" title="<?php the_title_attribute(); ?>"><?php the_title(); ?></a></h3>
        </div>
        <div class="post-content">
            <?php edit_post_link( 'Edit', '<h5 class="edit-link">', '</h5>' ); ?>
            <?php the_content(); ?>
        </div>
    </div>
</div>

<?php
    endwhile;
endif;
wp_reset_query();
?>

Ce ne sont là que quelques exemples rapides et impropres de la manière dont vous pouvez configurer la requête et la boucle. Ceux-ci vont simplement configurer et afficher le message le plus récent ou le plus haut de chaque type de message personnalisé.

Des instructions supplémentaires sur la classe WP_Query peuvent être trouvées ici . Tout le reste n'est que HTML et CSS.

Prendre plaisir!

2
Drew Gourley

Penser cela en incluant les pages est un peu gênant. Pensez-y comme récupérer et inclure le contenu de la page.

$page = get_page_by_title('About The Tests');
$content = apply_filters('the_content', $page->post_content);
echo $content;

Une autre façon serait de configurer une barre latérale spéciale pour cela et de laisser le client ajouter/supprimer/du contenu via des widgets. Mais cela peut facilement être exagéré.

4
Rarst