2017-05-04 3 views
0

WordPressのデフォルトの "yourdomainname.com/feed"アイテムを開始日と終了日のメタ値の後に並べ替えることを試みています。WordPressのすべての項目を開始日と終了日の順に並べ替えます。

私は、テンプレートで完璧に機能し、フロントエンドを行ういくつかのコードを持っています。しかし、私がfunctions.phpファイルにほとんど同じコードを挿入すると、フィードはそれによって "手つかず"のままです。

誰でも私が間違っていることを正しい方向に向けることができますか?以下は、functions.phpファイルに書いたコードです。

/* 
    Sort all posts to be ordered by meta start date. 
*/ 

function feed_filter($query){ 
    if($query->is_feed){ 

     // Find todays date 
     $date = date('Ymd'); 

     $query_args = array(
      'meta_query' => array(
       array(
        'key'  => 'end_date', 
        'compare' => '>=', 
        'value'  => $date, 
       ) 
      ), 
      'meta_key'   => 'start_date', 
      'orderby'   => 'meta_value_num', 
      'order'    => 'ASC' 
     ); 

     debugIt($query_args); 

     $query->set('meta_query', $query_args); 

    } 

} 
add_action('pre_get_posts', 'feed_filter'); 
+0

上記のコードを私がしようとしているものに近いように更新しました。 – Johns3n

答えて

0

私自身のRSSフィードテンプレートを作成することで問題を解決しました。ここに例があります。

<?php /* Template Name: Event RSS layout */ header("Content-type: text/xml"); echo '<?xml version="1.0" encoding="UTF-8" ?>'; ?> 

<rss version="2.0"> 
    <channel> 

     <?php 

      $date = date('Ymd'); 

      $args = array(
       'numberposts' => -1, 
       'meta_query' => array(
        array(
         'key'  => 'end_date', 
         'compare' => '>=', 
         'value'  => $date, 
        ) 
       ), 
       'meta_key'   => 'start_date', 
       'orderby'   => 'meta_value_num', 
       'order'    => 'ASC' 
      ); 

      $posts = get_posts($args); 

      foreach ($posts as $post){ setup_postdata($post); 

       $date = get_field('start_date'); 
       $date = strftime("%A den %e. %B", strtotime($date)); 

     ?> 

     <item> 
      <title><?php echo $date; ?> - <?php the_title(); ?></title> 
      <link><?php the_permalink(); ?></link> 
      <guid><?php the_permalink(); ?></guid> 
      <description> 
       <![CDATA[ 
       <img src="<?php the_post_thumbnail_url('thumbnail'); ?>" /><?php echo wp_trim_words(get_the_excerpt(), 40, '...'); ?>]]> 
      </description> 
      <pubDate><?php echo date('r', strtotime(get_the_date())); ?></pubDate> 
     </item> 

     <?php } ?> 

    </channel> 
</rss> 
関連する問題