使用开始日期和结束日期对wordpress Feed中的所有项目重新排序

时间:2017-05-04 12:05:46

标签: php xml wordpress rss feed

我正在尝试重新排序WordPress中的默认“yourdomainname.com/feed”项目,以便在开始日期和结束日期元值之后进行排序。

我有一些代码在模板中运行得很完美并且做了前端。但是,当我在functions.php文件中插入几乎相同的代码时,Feed仍保持“不受影响”。

任何人都可以找到或指出我正确的方向我做错了吗?这是我放在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');

1 个答案:

答案 0 :(得分:0)

我通过创建自己的RSS Feed模板解决了这个问题。这是一个例子。

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