サポート » 使い方全般 » 固定ページのカスタムフィールドの値をフロントページで出力

  • 解決済 hazudog

    (@hazudog)


    newsというスラッグ名をもった固定ページの値をフロントページで出力しようとしておりますが、うまく出力できません。
    newsという固定ページの値はカスタムフィールドで設定しています。

    フロントページのコードは以下を記述していますが、出力されません。

    <?php if ( have_posts() ) : query_posts('name=news'); ?>
    <?php echo get_post_meta($post->ID, 'news1-ttl', true); ?>
    <?php endif; ?>

    初歩的なご質問かと思いますが、ご教授の程お願いいたします。

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

    (@hissy)

    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を参照してください。

    トピック投稿者 hazudog

    (@hazudog)

    早速のご教授大変ありがとうございます。
    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; ?>

    モデレーター Takuro Hishikawa

    (@hissy)

    よく分かりませんが…

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

    これを消せばよいのでは?

    トピック投稿者 hazudog

    (@hazudog)

    言葉足らずで失礼いたしました。
    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も初心者です。

    どうぞ宜しくお願いいたします。

    モデレーター Takuro Hishikawa

    (@hissy)

    わあ、面倒な仕様ですね。新着のものを小さい数字に入れてもらうように運用を変えれば解決するのではないかと思います。

    それができないのであれば…そうですね、未検証ですがこんな感じで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);
    トピック投稿者 hazudog

    (@hazudog)

    早速のご教授大変ありがとうございます。
    以下の様に記述しましたが、出力される文字がおかしい見たいですが、
    当方のコードの書き方が間違っていますでしょうか?

    <?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” }

    たびたびで恐縮ですが、ご教授お願いいたします。

    モデレーター Takuro Hishikawa

    (@hissy)

    var_dumpで変数$newsの中身を出力しているだけです。出力結果は、期待した内容、順番になっていますか?期待通りであれば、$newsの中身は配列ですので、foreach文などで適当に出力してください。

    トピック投稿者 hazudog

    (@hazudog)

    ご教授ありがとうございます。
    以下の様に記述し、日付と新着情報が出力されましたが、
    出力の仕方が、日付は日付、新着情報は新着情報と出力されます。

    <?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も初心者で、希望する出力結果の記述方法が分かりません。

    たびたびで恐縮ですが、
    どうぞ宜しくお願いいたします。

    モデレーター Takuro Hishikawa

    (@hissy)

    こんな感じでしょう。

    for ( $i=0; $i<count($date); $i++ ) {
    echo $date[$i];
    echo $news[$i];
    }

    WordPress関係ありませんね。ある程度はOKだと思いますが、一応WordPressについてのフォーラムなので、PHPの配列について、少し勉強してみてくださいね。

    トピック投稿者 hazudog

    (@hazudog)

    カスタムフィールドで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;
    }
    ?>

    宜しくお願いいたします。

    トピック投稿者 hazudog

    (@hazudog)

    <?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;
    	}
    }
    
    ?>

    として自己解決しました。

11件の返信を表示中 - 1 - 11件目 (全11件中)
  • トピック「固定ページのカスタムフィールドの値をフロントページで出力」には新たに返信することはできません。