web-dev-qa-db-ja.com

テンプレートを使用してすべてのページを1ページにロードする方法

私はWordpressでどのように作業するかを学んでいます、そして私は自分のウェブサイトを構築しようとしています。

私のウェブサイトはワンページなので、私はすべての私のページをロードして(それからそれらはセクションとして数えます)、そこにテンプレートがあるフロントページにロードされることを望みます。

私は今、ページをループする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(); ?>

皆さんが私を助けてくれることを願っています!

1
Dennis Heitinga

あなたは使いたいページの各ページ名を交換してこれを行うことができます。私はテストしたところ、うまくいったようです。私はマイナス面があると確信しています。

<?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(); ?>

時々(私自身を含む)人々は、htmlを使用することによってほんのわずかの時間内にそれが今までであったものを作成することができたとき、彼らはこのようなことをやろうとすることに多くの時間を浪費するのでWordpressは主に動的コンテンツ用に設計されています。ほとんどの場合、1ページのサイトは通常かなり静的です。

私はワードプレスを使ってこれらの1ページのサイトのいくつかをやった、そしてこれが私が試したものである。 1)ワードプレスのテンプレート内の静的なHTML(最速かつ最も簡単)2)ページビルダーを使用しました。これをサポートしているVisual Composerがいくつかあります。 3)高度なカスタムフィールド

個人的には、高度なカスタムフィールドの方法が最も好きで、これを行うために2、3回使用しました。こうすることで、投稿エディタの出力でどのマークアップが変更されるのかを気にせずに、画像フィールドやテキストフィールドを簡単に追加できます。

    <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>

あるいは、私が本当に怠惰に感じているのであれば、 Custom Content Shortcode と一緒に使う以外は上記のようなAdvanced Custom Fieldsを使います。それであなたはphpについて全く心配する必要はありません。それを使ったことがあるか聞いたことがあるなら、それはwordpress用のmustache.jsのようなものです。ここで私はちょうどその方法を使用して作った2、3ページ( 視差 / スティッキセクション

あなたにとって最も簡単なことは何でもしてください。ほとんど編集されていないものにhtmlを使用しても問題はありません。あなたがクライアントのためにそれをやっているならプラスあなたが彼らがそのページが変更されたことを望んでいるなら彼らはまだあなたの助けを必要とするので

0
Bryan Willis

テーマ内に ページテンプレート 用のディレクトリpage-templatesを作成します。

次にテンプレートをそこに追加しますが、get_header()get_footer()の呼び出しは省略します。

テンプレートdefault.phpを作成してから、必要に応じて追加のテンプレートをすべて作成します。

今すぐページを書いて、適切なテンプレートを割り当てます。

あなたのループでこれを行います:

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