(Wordpress) Показывать только будущие записи в архиве и результаты поиска - PullRequest
1 голос
/ 03 августа 2010

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

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

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

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

1 Ответ

0 голосов
/ 14 августа 2010

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

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

Если все, что вы хотите сделать, это добавить дополнительная дата для 'show times', это может быть проще добавить мета-поле, которое делает именно это - используя дату публикации подделать это может быть потенциально проблематично, так как 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');

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

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

...