サポート » 使い方全般 » トップページに固定ページの抜粋を表示したい

  • 解決済 t.harada

    (@tharada)


    トップページに特定の固定ページの抜粋を表示したいと思っています。

    固定ページの抜粋はfunction.phpに以下のソースを追加することで出来ました。
    add_post_type_support( 'page', 'excerpt' );
    が、肝心の抜粋の表示方法が分かりません。

    現在はプラグインのThumbnail for Excerptsをインストールしており、トップページのソースに
    <?php the_excerpt(); ?>
    と記述していますが、この方法だと、固定ページではなく、通常の投稿記事の抜粋のみが表示されています。

    これを特定の固定ページ(ex.page ID 208と245など)の抜粋を表示する方法orヒントをご教授頂けませんでしょうか?

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

    (@jim912)

    t.haradaさん、こんにちは。

    考え方として

    1. get_postsのincludeパラメータに抜粋を表示する固定ページのIDを指定し、固定ページのデータを取得
    2. 取得できたデータをforeachでループ。the_excerptはグローバル変数の$postを参照するので、ループするときの変数を$postにしておくと楽。
    3. the_excerpt関数を実行

    という感じです。
    下記は、htmlのタグ付けを一切行っていないのでそのまま使うことは難しいかと思いますが、参考になれば幸いです。

    $excerpt_pages = get_posts( 'numberposts=-1&post_type=page&include=208,245&orderby=menu_order&order=ASC' );
    if ( $excerpt_pages ) {
    	foreach ( $excerpt_pages as $post ) {
    		the_excerpt();
    	}
    }

    私がたまに使ってる方法です。
    もしIDが固定なら、

    $id = 208;
    $page = get_page($id);
    $html = apply_filters('the_excerpt', $page->post_excerpt);
    echo $html;

    複数ページある場合は、jim912さんの方法がよいのかな?

    お二人ともありがとうございます!
    以下のソースでとりあえずの目的は達成することが出来ました。

    <?php $excerpt_pages = get_posts( 'numberposts=-1&post_type=page&post_parent=187,189,209&orderby=menu_order&order=ASC' );
    if ( $excerpt_pages ) {
    	foreach ( $excerpt_pages as $post ) {
    		 ?>
    	<a href="<?php echo get_page_link(ID);?>"><?php echo the_excerpt();
    		the_post_thumbnail();?></a>
    	<?php }?>
    	<?php }?>

    ここでもう一つ厄介なことが…。
    上記ソースではページID187,189,209の子ページの抜粋を全て表示していますが、それぞれの親に属する最新の子ページのみの抜粋を表示出来ないものでしょうか?

    イメージとしてはこんな感じです。
    Home以外全て固定ページで187,189,209に属する子ページは今後増えていく予定です。
    Home
     └187
      └A(187の中では最新ページ)
      └B
      └…
     └189
      └C(189の中では最新ページ)
      └D
      └…
     └209
      └E(209の中では最新ページ)
      └F
      └…
    ※上記のような構成でHomeにA,C,Eの抜粋のみを表示。

    こういう場合は抜粋にこだわらない方がよいのでしょうか?

    モデレーター jim912

    (@jim912)

    t.haradaさん、こんにちは。

    1. 187, 189, 209の配列をforeachでループ
    2. get_postsでpost_parentを親ページのID、post_typeをpage、numberpostsを1に指定
    3. 取得できた配列の1つめを$postに代入
    4. the_excerptを実行

    の手順でいけます。

    jim912さん、お返事ありがとうございます。

    恥ずかしいことに、PHPをゼロから書くほど知識がなく、お返事を頂いてから自分なりに調べつつコードを書いてみたのですが、全て意図通りになりませんでした。

    ど素人のコードで恐縮ですが、自分で書いたコードがこれです。

    $id = array(187, 189, 209);
    foreach ( $id as $post ){
    get_posts( 'numberposts=1&post_type=page&post_parent=187,189,209&orderby=menu_order&order=ASC' );}
    echo the_excerpt();

    どうも一行目から間違っているような気がしているのですが、実行しても何も表示されませんでした。

    取得できた配列の1つめを$postに代入

    特に、これをどう書けば良いのかが分からないままです…。

    大変恐縮ですが、もう少しだけヒントを頂けませんでしょうか?

    モデレーター jim912

    (@jim912)

    t.haradaさん、こんにちは。

    下記でどうでしょう。

    $parent_ids = array(187, 189, 209);
    foreach ( $parent_ids as $id ) {
    	$first_posts = get_posts( 'numberposts=1&post_type=page&orderby=menu_order&order=ASC&post_parent=' . $id );
    	if ( $first_posts ) {
    		$post = $first_posts[0];
    		the_excerpt();
    	}
    }

    「最新ページ」というのが、日時なのか、順序なのか分かりませんが、上記コードは、t.haradaさんのコードに倣って、順序でのソートになっています。日時であれば、orderbyをpost_dateに直してください。

    jim912さん、何度もありがとうございます!

    お教えいただいたソースに少しだけ手を加えて目的を達成することが出来ました。

    <?php
    $parent_ids = array(187, 189 ,209);
    foreach ( $parent_ids as $id ) {
    	$first_posts = get_posts( 'numberposts=1&post_type=page&orderby=menu_order&order=ASC&post_parent=' . $id );
    	if ( $first_posts ) {
    		$post = $first_posts[0]; ?>
    	<div class="<?php if ($id=='184'): ?>work<?php elseif ($id=='189') : ?>voice<?php else : ?>webmag<?php endif; ?>">
    		<a href="<?php echo get_page_link(ID);?>"><?php the_post_thumbnail();?></a>
    		<a href="<?php echo get_page_link(ID);?>"><?php echo the_excerpt();?></a>
    	</div>
    	<?php }?>
    	<?php }?>

    お陰さまでとても勉強になりました。
    今までCMSはずっとNucleusを使っていたので、まだまだWordPressには慣れていませんが、少しづつ覚えていきたいと思います。
    ありがとうございました!

7件の返信を表示中 - 1 - 7件目 (全7件中)
  • トピック「トップページに固定ページの抜粋を表示したい」には新たに返信することはできません。