web-dev-qa-db-fra.com

Comment charger toutes les pages en une page avec leurs modèles

J'apprends à travailler avec Wordpress et j'essaie de créer mon propre site Web.

Comme mon site Web est une page, je voudrais pouvoir charger toutes mes pages (elles comptent alors comme des sections) pour être chargées sur la page d'accueil, avec leurs modèles.

j'ai maintenant un index.php qui parcourt les pages, mais ne charge pas les modèles de page et je ne peux tout simplement pas le faire fonctionner, voici mon index.php:

<?php get_header(); ?>
    <!-- START CONTENT -->

        <?php
            $args = array(
                'sort_order' => 'ASC',
                'sort_column' => 'menu_order', //post_title
                'hierarchical' => 1,
                'exclude' => '',
                'child_of' => 0,
                'parent' => -1,
                'exclude_tree' => '',
                'number' => '',
                'offset' => 0,
                'post_type' => 'page',
                'post_status' => 'publish'
            );
            $pages = get_pages($args);

            //start loop
            foreach ($pages as $page_data) {
                 $content = apply_filters('the_content', $page_data->post_content);
                 $title = $page_data->post_title;
                 $slug = $page_data->post_name;
                 ?>

                 <div class='<?php echo "$slug" ?>'>

                 <?php
                     echo "$content";
                 ?>

                 </div>
         <?php } ?>

     <!-- END CONTENT -->
<?php get_footer(); ?>

J'espère vraiment que vous pourrez m'aider!

1
Dennis Heitinga

Vous pouvez le faire en échangeant chaque nom de page pour la page que vous souhaitez utiliser. Je viens de tester et cela semble fonctionner. Je suis sûr qu'il y a des inconvénients (vitesse pour un).

<?php
/**
 * Template Name: OnePager
 */
    <?php get_header(); ?>
    <!-- Page One - How it Works -->
    <section id="section1">
    <div class="container">
        <div class="col-sm-12">
            <?php
                $section1 = new WP_Query( 'pagename=how-it-works' );
                while ( $section1->have_posts() ) : $section1->the_post();?>
                <h1><?php the_title(); ?></h1>
                <?php the_content(); ?>
                <?php endwhile;
                wp_reset_postdata();
            ?>
            </div>
        </div>
    </div>
    </section>
    <!-- Page One - Who We Are -->
    <section id="section2">
    <div class="container">
        <div class="col-sm-12">
            <?php
                $section2 = new WP_Query( 'pagename=who-we-are' );
                while ( $section2->have_posts() ) : $section2->the_post();?>
                <h1><?php the_title(); ?></h1>
                <?php the_content(); ?>
                <?php endwhile;
                wp_reset_postdata();
            ?>
            </div>
        </div>
    </div>
    </section>
    <!-- Additional Pages Below -->

    <?php get_footer(); ?>

Parfois, les gens (y compris moi-même) sont tellement déterminés à utiliser php avec wordpress qu'ils perdent beaucoup de temps à essayer de faire des choses comme celle-ci alors qu'ils auraient pu créer ce que c'était en une fraction du temps en utilisant simplement le langage HTML. Wordpress est principalement conçu pour le contenu dynamique. Où, pour la plupart, les sites à une page sont généralement assez statiques.

J'ai fait quelques-uns de ces sites d'une page en utilisant Wordpress et voici ce que j'ai essayé. 1) HTML statique dans un modèle WordPress (le plus rapide et le plus facile) 2) Utilisé un constructeur de page. Il en existe quelques-uns, notamment Visual Composer, qui prennent en charge cette tâche. 3) Champs personnalisés avancés

Personnellement, j’ai le plus aimé la méthode des champs personnalisés avancés et je l’ai utilisée plusieurs fois à cette fin. De cette façon, vous pouvez facilement ajouter des champs d’image et des champs de texte sans avoir à vous soucier de la balise que l’éditeur de publication pourrait modifier en sortie.

    <section>
        <h1><?php the_field('banner_h1_title_text'); ?></h1>
        <h2><?php the_field('banner_h2_description_text'); ?></h2>
        <a href="#" class="btn btn-default">
            <?php the_field('call_to_action_main_button'); ?>
        </a>
    </section>

Ou si je me sens vraiment paresseux, je vais utiliser les champs personnalisés avancés comme ci-dessus, sauf que je l'utilise avec le Custom Content Shortcode alors vous n'avez pas à vous soucier de php. C'est un peu comme moustache.js pour wordpress, si vous en avez déjà utilisé ou entendu parler. Voici quelques pages que je viens de faire en utilisant cette méthode ( parallaxe / sections collantes )

Faites tout ce qui est le plus facile pour vous. Il n'y a rien de mal à utiliser le langage HTML pour quelque chose qui n'est presque jamais édité. De plus, si vous le faites pour un client, cela leur donnerait une raison de vous garder car ils auraient toujours besoin de votre aide s'ils souhaitaient que cette page soit modifiée :)

0
Bryan Willis

Créez un répertoire page-templates dans votre thème pour modèles de page .

Ajoutez ensuite vos modèles ici, mais omettez les appels à get_header() et get_footer().

Créez un modèle default.php, puis tous les modèles supplémentaires dont vous pourriez avoir besoin.

Maintenant, écrivez les pages et assignez les modèles appropriés.

Dans votre boucle, faites ceci:

foreach ($pages as $page_data)
{
    setup_postdata( $page_data );

    $template = get_post_meta( $page_data->ID, '_wp_page_template', true );

    if ( ! $template )
        $template = 'default';

    locate_template( $template, true, false );
}
1
fuxia