(Wordpress) Показывать только будущие сообщения в архиве и результатах поиска

У меня есть категория событий, которая доступна для поиска по подкатегории (по городу, где проводится мероприятие). У меня есть «Будущее сейчас!» плагин, чтобы позволить мне публиковать будущие посты с датой, но надеюсь, что я смогу настроить шаблон с разбивкой на страницы, который, когда срок действия поста истекает, больше не будет отображаться в цикле/архиве.

Мне также интересно, можете ли вы также отфильтровать эти сообщения из результатов поиска?

Это мой текущий код страницы событий, если это поможет:

<h2>Upcoming Events</h2>
        <ul class="posts">
            <?php
            $limit = get_option('posts_per_page');
            $paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
            query_posts('showposts=' . $limit . '&paged=' . $paged .'&cat=1&order=ASC');
            $wp_query->is_archive = true; $wp_query->is_home = false;
            ?>
            <?php if (have_posts()) : while (have_posts()) : the_post(); ?>
                <li class="events_ticker" id="post-<?php the_ID(); ?>">
                <span class="left">
                <h3><?php the_time('F jS, Y') ?></h3>
                <p><?php if (strlen($post->post_title) > 25) { echo substr(the_title($before = '', $after = '', FALSE), 0, 25) . '...';} else {the_title();} ?></p>
                <?php global $more; $more = 0; the_excerpt(); ?>
                <p><a href="<?php echo get_permalink(); ?>">Read More</a></p>
                </span>
                    <a href="<?php echo get_permalink(); ?>"><?php if ( function_exists("has_post_thumbnail") && has_post_thumbnail() ) { the_post_thumbnail(array(143,110), array("class" => "right post_thumbnail")); } ?></a>
                </li>
                <img src="<?php bloginfo('stylesheet_directory'); ?>/images/content_breaker_wide.png" alt=" breaker" class="content_breaker" />
            <?php endwhile; ?>
        </ul>
        <!-- end events loop -->
        <div class="navigation">
            <p class="alignleft"><?php next_posts_link('< Next') ?></p>
            <p class="alignright"><?php previous_posts_link('Next >') ?></p>
        </div>

<?php endif; ?>

person Mike    schedule 03.08.2010    source источник


Ответы (1)


Я не думаю, что есть простой параметр, чтобы сказать «все сообщения до этой даты», поэтому вам следует реализовать фильтр posts_where_paged. Там вы можете проверить !(is_archive() || is_search()), потому что эти два могут продолжаться как обычно. Для других частей вы добавляете " AND $wpdb->posts.post_date < NOW()" или что-то в этом роде (но не используйте сейчас, так как это скроет события, которые произойдут позже сегодня, а вы, вероятно, этого не хотите).

Похожий вопрос был задан на сайте WordPress Answers Stack Exchange (в закрытая бета-версия до 20 августа 2010 г., поэтому вы не можете посетить ее, если не прошли предварительную регистрацию). Предложение Джо Хойла было простым:

Если все, что вы хотите сделать, это добавить дополнительную дату для «времени показа», может быть проще добавить мета-поле, которое делает именно это — использование даты публикации для подделки может быть потенциально проблематичным, поскольку WordPress установит его на «будущий» статус всякий раз, когда он обновляется с будущей датой публикации (я думаю), поэтому вам придется перехватывать каждый раз, когда сообщение обновляется, чтобы снова установить его. Кроме того, таким образом вы можете зарезервировать «Дату публикации» для того, для чего она предназначена.

Я бы, наверное, просто использовал meta_key и настраиваемый метабокс. Хотя это зависит от того, насколько сложны ваши запросы, которые показывают сообщения.

Если вы установите meta_value как отметку времени, вы можете упорядочить по дате показа или выбрать до/после определенной даты:

$events = get_posts('post_type=events&meta_key=show_time&meta_value='
. strtotime( '+1 week' ) .
'&meta_compare=<&orderby=meta_value');

Получал бы все «события» с временем показа не позднее, чем через неделю с текущей даты. Примечание. Приведенное выше не проверено, но должно работать :)

(Этот ответ является вики-сообществом, поэтому я не получаю очков репутации просто за репост того, что сказал Джо.)

person Community    schedule 14.08.2010