t.haradaさん、こんにちは。
考え方として
- get_postsのincludeパラメータに抜粋を表示する固定ページのIDを指定し、固定ページのデータを取得
- 取得できたデータをforeachでループ。the_excerptはグローバル変数の$postを参照するので、ループするときの変数を$postにしておくと楽。
- 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さん、お返事ありがとうございます。
恥ずかしいことに、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に代入
特に、これをどう書けば良いのかが分からないままです…。
大変恐縮ですが、もう少しだけヒントを頂けませんでしょうか?
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には慣れていませんが、少しづつ覚えていきたいと思います。
ありがとうございました!