サポート » 使い方全般 » イベントの日付をカスタムフィールドで入力し、ソートしたい

  • 解決済 keika0

    (@keika0)


    こんにちは。質問させていただきます。

    現在wp2.9.2でイベント情報を掲載したく、以下のような用途でファイルを作成しています。

    ※用途: ——————————————————-

    1.「イベント情報」カテゴリを作成。その下に「交流会」「料理教室」「ボランティア」などサブカテゴリを作成。
    2. イベントを「告知」「報告」「募集中」の3つのタグで分類。
    3. 上記3つのタブを含む記事が現在のカテゴリ内になかったら「該当するイベントはありません。」表示。
    4. イベント日付は記事投稿日時ではなく、カスタムフィールド($eyear、$emonth、$eday)で入力・表示。
    5. 各イベントをカスタムフィールで入力したイベント日付でソート。

    ※イメージ ——————————————————-

    ■告知
    ・2010/2/23(火) test
    ・2010/2/16(火) WordPress 2.9.2 が利用可能です

    ■報告
    ・2009/1/20(火) テスト2

    ■募集中
    ・該当するイベントはありません。

    —————————————————————-

    上記内容に合わせて、以前ご質問させていただいた際にご回答いただいた【現在のカテゴリを習得し、カテゴリとタグを指定してタイトル一覧を表示(http://ja.forums.wordpress.org/topic/1831?replies=3)】を流用し以下のコードを設置しましたが5のソート部分で上手く動作しませんでした。

    <?php
    $my_tags = array( '告知', '報告', '募集中'); // 一覧表示させるタグを設定
    foreach ( $my_tags as $my_tag ) :
        $tag_obj  = get_term_by( 'name', $my_tag, 'post_tag' );
        if ( !$tag_obj ) { //タグが無い場合 ?>
    		<h3>■<?php echo $my_tag; ?></h3>
    		<ul><li>該当するイベントはありません。</li></ul>
        <?php }	//タグが有ったら以下の処理
        $tag_ID   = $tag_obj->term_id;
        $my_args  = array(
            'cat' => get_query_var( 'cat' ),
            'tag__and' => array( $tag_ID ),
        );
        $my_query = new WP_Query( $my_args );
        if ( $my_query->have_posts() ) :
    ?>
    <h3>■<?php echo $my_tag; ?></h3>
    <ul>
    <?php while ( $my_query->have_posts() ) : $my_query->the_post();
        //カスタムフィールドの年・月・日を1つにまとめる。
    		$eyear = get_post_meta($post->ID, event_year, true);
    		$emonth = get_post_meta($post->ID, event_month, true);
    		$eday = get_post_meta($post->ID, event_day, true);
    		$eventday = date("Y/m/d", mktime( 0, 0, 0, $emonth, $eday, $eyear));
    
    	//日本語曜日を作る。
    		$week_array = array( "日", "月", "火", "水", "木", "金", "土" );
    		$ptimestamp = mktime(0, 0, 0, $emonth, $eday, $eyear);
    		$weekno = date('w', $ptimestamp);
    		$weekjp = $week_array[$weekno];
    
    	//ソート
    		$timesorts = $ptimestamp;
    		rsort($timesorts);
    		foreach ($timesorts as $tmp) {
    ?>
    	<li><?php echo $eventday; ?>(<?php echo $weekjp; ?>) <a href="<?php the_permalink() ?>"><?php the_title(); ?></a></li>
    <?php } //ソート終了
    	endwhile; ?>
    </ul>
    <?php endif; endforeach; ?>

    上記のコードではイベントの日付とタイトル部分が表示さませんでした。
    お手数をおかけしますが、どなたかご指導の程宜しくお願い致します。

2件の返信を表示中 - 1 - 2件目 (全2件中)
  • kz

    (@kz)

    未検証なので細かいことはよきにはからってください。

    <?php
    $my_tags = array( '告知', '報告', '募集中'); // 一覧表示させるタグを設定
    foreach ( $my_tags as $my_tag ) :
      $tag_obj  = get_term_by( 'name', $my_tag, 'post_tag' );
      if ( !$tag_obj ) { //タグが無い場合
      ?>
        <h3>■<?php echo $my_tag; ?></h3>
        <ul><li>該当するイベントはありません。</li></ul>
      <?php
        continue;
      }	//タグが有ったら以下の処理
    
      $tag_ID   = $tag_obj->term_id;
      $my_args  = array(
        'cat' => get_query_var( 'cat' ), // カテゴリーアーカイブですよね?
        'tag__and' => array( $tag_ID ),
      );
      $my_query = new WP_Query( $my_args );
      if ( $my_query->have_posts() ) :
      ?>
      <h3>■<?php echo $my_tag; ?></h3>
      <ul>
      <?php
      $timesorts = array();
        while ( $my_query->have_posts() ) : $my_query->the_post();
          //カスタムフィールドの年・月・日を1つにまとめる。
          $eyear = get_post_meta($post->ID, 'event_year', true);
          $emonth = get_post_meta($post->ID, 'event_month', true);
          $eday = get_post_meta($post->ID, 'event_day', true);
          $eventday = date("Y/m/d", mktime( 0, 0, 0, $emonth, $eday, $eyear));
    
          //日本語曜日を作る。
          $week_array = array( "日", "月", "火", "水", "木", "金", "土" );
          $ptimestamp = mktime(0, 0, 0, $emonth, $eday, $eyear);
          $weekno = date('w', $ptimestamp);
          $weekjp = $week_array[$weekno];
    
          $timesorts[$ptimestamp] =
            "<li>$eventday($weekjp) <a href=\"" . get_permalink($post->ID) . '">' .
            get_the_title($post->ID) . '</a></li>';
        endwhile; 
    
      //ソート
      krsort($timesorts);
      echo implode("\n", $timesorts);
      //ソート終了
      ?>
      </ul>
      <?php
      endif;
      wp_reset_query();
    endforeach;
    ?>

    トピック投稿者 keika0

    (@keika0)

    kz様、ご回答ありがとうございます。

    >カテゴリーアーカイブですよね?
    説明不足ですみません。その通りです;

    教えていただいたコードで無事希望通りの表示をすることができました。

2件の返信を表示中 - 1 - 2件目 (全2件中)
  • トピック「イベントの日付をカスタムフィールドで入力し、ソートしたい」には新たに返信することはできません。