サポート » 使い方全般 » front-page.phpを使用して、固定ページの子ページの内容を表示したい。

  • 解決済 GaogaoX

    (@gaogaox)


    会社のホームページを作成しています。

    ●やりたい事
    front-page.phpを使用して、固定ページの子ページの内容を表示したい。

    ●わからない事
    <div id=”topSubContents”>の中で、固定ページの「リフォーム種類」のタイトルと内容を表示したいのですが、表示されません。

    フロントページでホームに設定した事により、固定ページの親から子へのアクセスが出来ないようになったのでしょうか?
    また、もっと簡単な方法があるのでしょうか?
    子ページの個数が増える事も予想されるので、page-idやslugを使わず子ページとして処理をしたいと考えています。
    よろしくお願いします。

    ●WordPress のバージョン
    WordPress 3.5.1

    ●サーバー環境
    Amazon EC2

    ●WORDPRESSの設定

    ダッシュボードの「設定->表示設定->フロントページの表示」
    ——————————————————————————
    固定ページ(以下を選択)
    フロントページ:ホーム
    投稿ページ:お知らせ
    ——————————————————————————
    に設定しています。

    ダッシュボードの「固定ページ一覧」
    ——————————————————————————
    ホーム
    -リフォーム種類
    ——————————————————————————
    と作成し、リフォーム種類はページ属性で「親:ホーム」に設定しています。

    ●front-page.phpの内容

    <?php get_header(); ?>
    
    <div id="topContents">
    	<div id="topConentsImage">
    		<div id="button">
    			<ul id="left">
    
    <li><a>">リフォーム実例</a></li>
    <li><a>">オール電化</a></li>
    			<ul id="right">
    
    <li><a>">リフォーム種類</a></li>
    <li><a>">太陽光発電</a></li>
    		</div>
    	</div>
    	<div id="topMessage">
    		<?php if(have_posts()):while(have_posts()):the_post(); ?>		<!--メインループ-->
    			<?php the_content(); ?>						<!--親ページの内容を表示-->
    		<?php endwhile;endif; ?>
    	</div>
    
    	<div id="topNews">
    		<h2 id="topNewsHead">お知らせ</h2>
    		<div id="topNewsContents">
    			<?php $loop =new WP_Query('page_id=',$post->ID); ?>		<!--サブループ-->
    			<?php if(have_posts()) : ?>					<!--投稿のお知らせを表示-->
    
    <ul>
    					<?php while ( $loop->have_posts()) : $loop->the_post(); ?>
    
    <li>
    						<span class="date"><?php the_time('Y.m.d'); ?></span>
    						<a>"><?php the_title(); ?></a>
    					</li>
    					<?php endwhile; ?>
    				</ul>
    			<?php  else : ?>
    
    <li>現在表示する記事がありません。</li>
    			<?php endif; ?>
    			<p class="viewAll"><a>">すべて見る</a></p>
    		</div>
    		<div id="topSubContents">
    			<?php
    				if ( $post->post_parent == 0 ) {
    					$child_posts = get_posts( 'numberposts=-1&order=ASC&orderby=post_title&post_type=page&post_parent=' . $post->ID );
    					if ( $child_posts ) {
    						foreach ( $child_posts as $child ) {
    							$c_title = apply_filters( 'the_title', $child->post_title );
    							$c_content = get_extended( $child->post_content );
    							$c_content = apply_filters( 'the_content', $c_content['main'] );
    			?>
    			<h3><?php echo $c_title; ?></h3>
    				<?php echo $c_content; ?>				<!--子ページの内容を表示-->
    			<?php
    						}
    					}
    				}
    			?>
    		</div>
    	</div>
    </div><!--end of #topContent-->
    
    <?php get_footer(); ?>

5件の返信を表示中 - 1 - 5件目 (全5件中)
  • モデレーター jim912

    (@jim912)

    お知らせのループ処理で、グローバル変数の $post が書き換わってしまっているものと思われます。
    まずは、topMessage 時点での $post->ID と、topSubContents 時点での $post->ID を表示させて比較してみてください。
    そして、その後に topNewsContents のループ後に、 wp_reset_postdata をしてみてください。

    モデレーター gatespace

    (@gatespace)

    自分でコード書かなくてもプラグインを使うと言う手もあります。
    フロントが固定ページでも使えますよ。
    あと、出力されるHTMLや内容も自分でカスタマイズ可能です。

    Child Pages Shortcode
    http://wordpress.org/plugins/child-pages-shortcode/

    Child Pages Shortcode – 子ページの一覧を出力するショートコード

    Child Pages Shortcode – 子ページの一覧を出力するショートコード

    早々の解答ありがとうございます。

    ●jim912さんの解答通りにやってみました。

    topNews $post->id: 40
    toSubContents $post->id: 1

    となっていました。
    その後、topNewsContents のループ後に、 wp_reset_postdata()を行ったところ、

    topNews $post->ID: 40
    toSubContents $post->ID: 40

    となり、無事に、子ページの内容が表示されました。
    ありがとうございます。

    ●gatespaceさん
    まさかプラグインであるとは思いもしませんでした。
    当ホームページで予定している複数のサービスメニューを表示する所で使えそうです。
    教えて頂いてありがとうございます。

    質問ばかりで申し訳ありませんが、もし宜しければ、この$post->id: 40の”40″や”1″は何を意味教えて頂けませんか?

    モデレーター jim912

    (@jim912)

    40は、フロントページに設定した「ホーム」の固定ページのIDです。
    本来は、このIDの子ページを topSubContents で表示させたいのですが、その前の topNewsContents のループによって、$post が上書きされてしまっています。1は、このループの最後に表示される投稿のIDです。

    上書きされてしまった $post を元に戻すのが、追加してもらった wp_reset_postdata です。
    これにより、topSubContents でも $child_posts を取得している get_posts のパラメーター $post->ID が 40 となり、ホームの子ページが表示されるというわけです。

    ありがとうございます。
    言われてみれば、その名の通り、固定ページや投稿のIDですよね。
    なんか、分かりそうな事を聞いてしまいました。

    でも、今回の件、とても勉強になりました。
    重ねて、ありがとうございます。

5件の返信を表示中 - 1 - 5件目 (全5件中)
  • トピック「front-page.phpを使用して、固定ページの子ページの内容を表示したい。」には新たに返信することはできません。