固定ページのカスタムフィールドの値をフロントページで出力
-
newsというスラッグ名をもった固定ページの値をフロントページで出力しようとしておりますが、うまく出力できません。
newsという固定ページの値はカスタムフィールドで設定しています。フロントページのコードは以下を記述していますが、出力されません。
<?php if ( have_posts() ) : query_posts('name=news'); ?> <?php echo get_post_meta($post->ID, 'news1-ttl', true); ?> <?php endif; ?>
初歩的なご質問かと思いますが、ご教授の程お願いいたします。
-
query_postsを残して修正するならこうかな。
query_posts('name=news&post_type=page'); if ( have_posts() ) : while ( have_posts() ) : the_post(); echo get_post_meta( get_the_ID(), 'news1-ttl', true ); endwhile; endif;
get_postsで取得する
$mypage = get_posts('pagename=news&post_type=page'); $mypage = $mypage[0]; echo get_post_meta($mypage->ID, 'news1-ttl', true);
query_postsについてはぜひCodexを参照してください。
早速のご教授大変ありがとうございます。
newsの固定ページからの取得と出力はできました。関連して、もう一件解決したい事項がありまして、ご教授いただければと思います。
news(固定)ページでは10件の情報があるとして、そのうちの5件のみをフロントページに出力しなければなりません。以下のコードですと10件すべて表示される状態ですので、
新着5件のみ表示するにはどのように記述すべきでしょうか?記事のタイトルを取得するのであれば、showposts=5&などとすればいいのは分かるのですが。。
どうぞ宜しくお願いいたします。
<?php query_posts(‘name=news&post_type=page’); ?>
<?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>
<?php echo get_post_meta($post->ID, ‘news10-ttl’, true); ?>
<?php echo get_post_meta($post->ID, ‘news9-ttl’, true); ?>
<?php echo get_post_meta($post->ID, ‘news8-ttl’, true); ?>
<?php echo get_post_meta($post->ID, ‘news7-ttl’, true); ?>
<?php echo get_post_meta($post->ID, ‘news6-ttl’, true); ?>
<?php echo get_post_meta($post->ID, ‘news5-ttl’, true); ?>
<?php echo get_post_meta($post->ID, ‘news4-ttl’, true); ?>
<?php echo get_post_meta($post->ID, ‘news3-ttl’, true); ?>
<?php echo get_post_meta($post->ID, ‘news2-ttl’, true); ?>
<?php echo get_post_meta($post->ID, ‘news1-ttl’, true); ?>
<?php endwhile; endif; ?>よく分かりませんが…
<?php echo get_post_meta($post->ID, 'news5-ttl', true); ?> <?php echo get_post_meta($post->ID, 'news4-ttl', true); ?> <?php echo get_post_meta($post->ID, 'news3-ttl', true); ?> <?php echo get_post_meta($post->ID, 'news2-ttl', true); ?> <?php echo get_post_meta($post->ID, 'news1-ttl', true); ?>
これを消せばよいのでは?
言葉足らずで失礼いたしました。
newsの固定ページにはカスタムフィールドで30件の新着情報を顧客側で更新できるようにしておりまして、新着のものは番号大きい数字になります。数字は確定していないのと変動がありそうなので数字は24かもしれませんし、15かもしれません。
そこで新着の5件のみ表示したいということです。<?php echo get_post_meta($post->ID, ‘news1-ttl’, true); ?>
が一番古い情報で
<?php echo get_post_meta($post->ID, ‘news30-ttl’, true); ?>
が新着情報になります。このようなケースではどのように記述すればいいのでしょうか。
当方WPもPHPも初心者です。
どうぞ宜しくお願いいたします。
わあ、面倒な仕様ですね。新着のものを小さい数字に入れてもらうように運用を変えれば解決するのではないかと思います。
それができないのであれば…そうですね、未検証ですがこんな感じで5件取得できると思います。
$news = array(); for ( $i=30; $i>0; $i-- ) { if ( $postmeta = get_post_meta($post->ID, 'news' . $i. '-ttl', true) ) { $news[] = $postmeta; } } $news = array_slice($news,0,5); var_dump($news);
早速のご教授大変ありがとうございます。
以下の様に記述しましたが、出力される文字がおかしい見たいですが、
当方のコードの書き方が間違っていますでしょうか?<?php $news = array(); for ( $i=30; $i>0; $i-- ) { if ( $postmeta = get_post_meta($post->ID, 'news' . $i. '-ttl', true) ) { $news[] = $postmeta; } } $news = array_slice($news,0,5); var_dump($news); ?>
以下が出力結果です。
array(5) { [0]=> string(79) “新着情報” [1]=> string(66) “新着情報2” [2]=> string(48) “新着情報3” [3]=> string(39) “新着情報4” [4]=> string(48) “新着情報5” }たびたびで恐縮ですが、ご教授お願いいたします。
var_dumpで変数$newsの中身を出力しているだけです。出力結果は、期待した内容、順番になっていますか?期待通りであれば、$newsの中身は配列ですので、foreach文などで適当に出力してください。
ご教授ありがとうございます。
以下の様に記述し、日付と新着情報が出力されましたが、
出力の仕方が、日付は日付、新着情報は新着情報と出力されます。<?php $date = array(); for ( $i=30; $i>0; $i-- ) { if ( $postmeta = get_post_meta($post->ID, 'news' . $i. '-date', true) ) { $date[] = $postmeta; } } $date = array_slice($date,0,5); foreach( $date as $value ){ echo $value."<br />\n"; // 改行しながら値を表示 } ?> <?php $news = array(); for ( $i=30; $i>0; $i-- ) { if ( $postmeta = get_post_meta($post->ID, 'news' . $i. '-ttl', true) ) { $news[] = $postmeta; } } $news = array_slice($news,0,5); foreach( $news as $value ){ echo $value."<br />\n"; // 改行しながら値を表示 } ?>
出力結果:
10月30日
9月5日
8月22日
7月21日
6月20日新着情報1
新着情報2
新着情報3
新着情報4
新着情報5希望出力結果:
10月30日 新着情報1
9月5日 新着情報2
8月22日 新着情報3
7月21日 新着情報4
6月20日 新着情報5当方WPもPHPも初心者で、希望する出力結果の記述方法が分かりません。
たびたびで恐縮ですが、
どうぞ宜しくお願いいたします。こんな感じでしょう。
for ( $i=0; $i<count($date); $i++ ) { echo $date[$i]; echo $news[$i]; }
WordPress関係ありませんね。ある程度はOKだと思いますが、一応WordPressについてのフォーラムなので、PHPの配列について、少し勉強してみてくださいね。
カスタムフィールドで30件設定できる新着情報に対して、
新着5件のみを取得してフロントページ出力したいのですが、
以下の記述ですとすべてが表示されます。
小さい数字が古い情報で、大きい数字の方が新着になります。array_sliceを使用して、以下を改造すれば、新着5件を取得できそうな事は分かるのですが、記述方法が分かりませんので、ご教授宜しくお願いいたします。
<?php for ($i=30; $i>0; $i--){ if ( get_post_meta($post->ID,'news'.$i.'-date',TRUE) ): ?> <?php echo get_post_meta($post->ID, 'news'.$i.'-date', true); ?> <?php if ( get_post_meta($post->ID,'icon'.$i.'',TRUE) ): ?> <?php echo wp_get_attachment_image(get_post_meta($post->ID,'icon'.$i.'',true)); ?> <?php endif; ?> <?php if ( get_post_meta($post->ID,'news'.$i.'-url',TRUE) ): ?><a href="<?php echo get_post_meta($post->ID, 'news'.$i.'-url', true); ?>"><?php endif; ?><?php echo get_post_meta($post->ID, 'news'.$i.'-ttl', true); ?></a> <?php endif; } ?>
宜しくお願いいたします。
<?php $cnt=0; for ($i=30; $i>0; $i--){ if ( get_post_meta($post->ID,'news'.$i.'-date',TRUE) ): ?> <li class="clearfix"><span class="issue"><?php echo get_post_meta($post->ID, 'news'.$i.'-date', true); ?></span> <span class="issue2"> <?php if ( get_post_meta($post->ID,'icon'.$i.'',TRUE) ): ?> <?php echo wp_get_attachment_image(get_post_meta($post->ID,'icon'.$i.'',true)); ?> <?php endif; ?> <?php if ( get_post_meta($post->ID,'news'.$i.'-url',TRUE) ): ?><a href="<?php echo get_post_meta($post->ID, 'news'.$i.'-url', true); ?>"><?php endif; ?><?php echo get_post_meta($post->ID, 'news'.$i.'-ttl', true); $cnt++; ?></a></span></li> <?php endif; if ($cnt==5){ break; } } ?>
として自己解決しました。
- トピック「固定ページのカスタムフィールドの値をフロントページで出力」には新たに返信することはできません。