サポート » テーマ » 複数の投稿の、カスタムフィールドを取得したい

  • 解決済 sarasarari

    (@sarasarari)


    WP初心者です。
    通常の投稿と、カスタム投稿があり、どちらも一覧でタイトルを表示する事まではできましたが、
    中身の表示が上手くいかず困っております。
    どなたかご教授いただけませんでしょうか?

    【やりたい事】
    ・通常投稿とカスタム投稿の、カスタムフィールドの値を表示したい。

    【状況】
    ・通常投稿、カスタム投稿、いずれも「Smart Custom Fields」のプラグインで作成した、繰り返しのカスタムフィールドが設置してある。

    《通常投稿に設置してあるカスタムフィールド》
     グループ名:in
     サブフィールド:in_uni
     サブフィールド:in_volume

    《カスタム投稿に設置してあるカスタムフィールド》
     グループ名:out
    サブフィールド:out_cc
     サブフィールド:out_uni
     サブフィールド:out_volume

    <li>
    <p class="date">ここに投稿日を表示したい
    
    <p class="title">ここにタイトルを表示したい
    
    <p class="out_cc">
    もしこの投稿がカスタム投稿のフィールドの場合、ここに「out_cc」を表示したい
    違う場合は、ここに、<img src="<?php bloginfo('template_url'); ?>/images/uni01.png">を表示したい。
    
    <p class="in_out">ここに「in_uni」または「out_uni」を表示したい
    
    <p class="st_nan">ここに「in_volume」または「out_volume」を表示したい
    
    </li>

    現状、以下で日付とタイトルは出ましたが、条件分岐をどう書いていいのかも分からず困っております。

    <?php $args = array('post_type' => array('post', 'haihu'), 'posts_per_page' => 5); ?>
    <?php $posts = get_posts($args); ?>
    <?php if (!empty($posts)): ?>
    <ul>
    <?php foreach ($posts as $post):setup_postdata($post); ?>
    	
    <li>
    <p class="date"><?php echo get_the_date(); ?>
    
    <p class="title"><?php the_title(); ?>
    
    <p class="out_cc">
    
    <p class="in_out"><?php echo $field_value['in_uni']; ?>
    
    <p class="st_nan"><?php echo $field_value['in_volume']; ?>
    
    </li>
    
    <?php endforeach; ?>
    <?php wp_reset_postdata(); ?>
    </ul>
    <?php endif; ?>
10件の返信を表示中 - 1 - 10件目 (全10件中)
  • こんにちは

    get_post_type() で、現在の投稿の投稿タイプを取得することができるので、これで判定できると思います。

    例:

    $post_type = get_post_type();
    if ( 'haihu' == $post_type ) :
    sarasarari

    (@sarasarari)

    ishitaka (@ishitaka)様

    度々、ありがとうございます。
    勉強が足らず、質問ばかりで申し訳ございません。

    ご指摘の記述は、このようにということでしたでしょうか?
    こちらを記述したところ、表示は空欄のままだったため、再度教えていただきたく、
    申し訳ございませんが、よろしくお願いいたします。

    <p class="out_cc">
    <?php $post_type = get_post_type(); if ( 'haihu' == $post_type ) : ?>
    	<?php echo $field_value['out_cc']; ?>
    <?php endif; ?>
    </p>
    • この返信は2週、 2日前にsarasarariが編集しました。
    sarasarari

    (@sarasarari)

    連投で失礼いたします。

    以下のように記述してみたところ、カスタム投稿は表示されるのですが、
    通常投稿の方はエラーが出てしまいました。

    <?php $args = array(
        'numberposts' => 5, //表示する記事の数
        'post_type' => 'haihu' //投稿タイプ名
        // 条件を追加する場合はここに追記
      );
      $customPosts = get_posts($args);
      if($customPosts) : foreach($customPosts as $post) : setup_postdata( $post );
      ?>
      <li>
    	  <p class="date"><?php echo get_the_date(); ?></p>
    	  <?php $out = SCF::get('out'); foreach ($out as $fields ) { ?>
    	  <p class="out_cc"><?php echo $fields['out_cc']; ?></p>
    	  <p class="in_out"><?php echo $fields['out_uni']; ?></p>
    	  <p class="st_nan"><?php echo $fields['out_volume']; ?></p>
    	  <?php } ?>
     </li>
      <?php endforeach; ?>
      <li>
    	  <p class="date"><?php echo get_the_date(); ?></p>
    	  <?php $into = SCF::get('in'); foreach ($into as $fields ) { ?>
    	  <p class="out_cc">入荷image</p>
    	  <p class="in_out"><?php echo $fields['in_uni']; ?></p>
    	  <p class="st_nan"><?php echo $fields['in_volume']; ?></p>
    	  <?php } ?>
      </li>
      <?php else : //記事が無い場合 ?>
      <li><p class="date">履歴はありません</li>
      <?php endif;
      wp_reset_postdata(); //クエリのリセット ?>
    • この返信は2週、 2日前にsarasarariが編集しました。

    グループなので、SCF::get() の戻り値は配列になるかと・・・

    例:

    $post_type = get_post_type();
    if ( 'haihu' == $post_type ) {
    	$g = SCF::get( 'out' );
    	foreach ( $g as $fields ) {
    		echo esc_html( $fields['out_uni'] );
    	}
    } else {
    	$g = SCF::get( 'in' );
    	foreach ( $g as $fields ) {
    		echo esc_html( $fields['in_uni'] );
    	}
    }
    sarasarari

    (@sarasarari)

    早々にご回答いただき、ありがとうございます。
    お恥ずかしい限りですが、いただいたご指摘を、どの部分と差し替えれば良いのか四苦八苦中です・・。

    sarasarari

    (@sarasarari)

    何度も申し訳ございません。

    このように書いてみましたが、エラーで画面が真っ白になってしまいました(><)

    <?php $args = array(
        'numberposts' => 5, //表示する記事の数
        'post_type' => 'haihu' //投稿タイプ名
        // 条件を追加する場合はここに追記
      );
      $customPosts = get_posts($args);
      if($customPosts) : foreach($customPosts as $post) : setup_postdata( $post );
      ?>
      <li>
    	  <p class="date"><?php echo get_the_date(); ?></p>
    	  <?php $post_type = get_post_type();
    if ( 'haihu' == $post_type ) {
    	$g = SCF::get( 'out' );
    	foreach ( $g as $fields ) { ?>
    	  <p class="out_cc"><?php echo esc_html( $fields['out_cc'] ); ?></p>
    	  <p class="in_out"><?php echo esc_html( $fields['out_uni']; ?></p>
    	  <p class="st_nan"><?php echo esc_html( $fields['out_volume']; ?></p>
    	}
    } else {
    	$g = SCF::get( 'in' );
    	foreach ( $g as $fields ) {
    		echo esc_html( $fields['in_uni'] );
    	  <p class="out_cc">入荷image</p>
    	  <p class="in_out"><?php echo esc_html( $fields['in_uni']; ?></p>
    	  <p class="st_nan"><?php echo esc_html( $fields['in_volume']; ?></p>
    	}
    }
    		 ?>	  
     </li>
      <?php endforeach; ?>
      
      <?php else : //記事が無い場合 ?>
      <li><p class="date">履歴はありません</li>
      <?php endif;
      wp_reset_postdata(); //クエリのリセット ?>

    複数の構文エラー(syntax error)があります。

    <?php echo esc_html( $fields['out_uni']; ?>

    <?php echo esc_html( $fields['out_uni']; ) ?>

    	}
    } else {
    	$g = SCF::get( 'in' );

    	<?php }
    } else {
    	$g = SCF::get( 'in' );

    デバッグモードでエラーを確認してみてください。

    sarasarari

    (@sarasarari)

    ありがとうございます。

    エラーは解除でき、カスタム投稿については繰り返して表示ができるようになったのですが、
    通常投稿の方は表示がされず・・。
    何か他にも記述が必要でしたでしょうか?

    よろしくお願いいたします。

    <?php $args = array(
        'numberposts' => 5, //表示する記事の数
        'post_type' => 'haihu' //投稿タイプ名
        // 条件を追加する場合はここに追記
      );
      $customPosts = get_posts($args);
      if($customPosts) : foreach($customPosts as $post) : setup_postdata( $post );
      ?>
      <li>
    	  <p class="date"><?php echo get_the_date(); ?></p>
    	  <?php $post_type = get_post_type();
    if ( 'haihu' == $post_type ) {
    	$g = SCF::get( 'out' );
    	foreach ( $g as $fields ) { ?>
    	  <p class="out_cc"><?php echo esc_html( $fields['out_cc'] ); ?></p>
    	  <p class="in_out"><?php echo esc_html( $fields['out_uni'] ); ?></p>
    	  <p class="st_nan"><?php echo esc_html( $fields['out_volume'] ); ?></p>
    	<?php }
    } else {
    	$g = SCF::get( 'in' );
    	foreach ( $g as $fields ) { ?>
    	  <p class="out_cc">入荷image</p>
    	  <p class="in_out"><?php echo esc_html( $fields['in_uni'] ); ?></p>
    	  <p class="st_nan"><?php echo esc_html( $fields['in_volume'] ); ?></p>
    	<?php }
    }  ?>	  
     </li>
      <?php endforeach; ?>
      
      <?php else : //記事が無い場合 ?>
      <li><p class="date">履歴はありません</li>
      <?php endif;
      wp_reset_postdata(); //クエリのリセット ?>

    'post_type' => 'haihu' //投稿タイプ名

    'post_type' => array( 'post', 'haihu' )

    では?

    sarasarari

    (@sarasarari)

    ありがとうございます!!

    最初に書いていた記述を、色々試している間に、変えてしまっていたようでした。

    <?php $args = array('post_type' => array('post', 'haihu'), 'posts_per_page' => 5

    こちらで無事に表示する事ができました。

    初心者にも、非常に丁寧に教えていただき、ありがとうございました。
    本当に助かりました。

    感謝を込めまして、解決済みにさせていただきます。

10件の返信を表示中 - 1 - 10件目 (全10件中)
  • このトピックに返信するにはログインが必要です。