Отображение сообщений между определенным диапазоном дат - PullRequest
4 голосов
/ 26 апреля 2011

Попытка отобразить мои пользовательские типы сообщений для определенных диапазонов дат.Я хочу показывать сообщения только в течение определенного месяца.Я знаю, что мне нужно подключиться к фильтру posts_where, но я не могу понять, как передать аргументы этой функции, поскольку мне нужно передать диапазон дат.

Я видел множество примеров того, как изменитьпредложение WHERE для выбора диапазона дат, но только в статическом режиме.Мне нужно сделать следующее:

add_filter('posts_where', 'my_custom_where', '', '04/2011'); //pass my date to the filter

function my_custom_where( $where = '' ) {

    //figure range  
    $range = array(
        'start' => $date . '-1',
        'end' => $date . '-' . cal_days_in_month(CAL_GREGORIAN, date('m', $date), date('Y', $date))
    );

    $where .= " AND post_date ....."; //build where with date range

    return $where;

}

Надеюсь, что это имеет смысл.Любая помощь будет оценена.

Ответы [ 4 ]

7 голосов
/ 07 сентября 2011

Вы можете сделать его динамическим, если прибегаете к глобальным переменным. (Не идеально, но эй, я не нашел более чистого пути ...)

Сначала определите глобальную переменную для даты

$GLOBALS['start_date'] = '2011-07-31';

затем добавьте свой фильтр

add_filter( 'posts_where', 'filter_where' );

 function filter_where( $date, $where = '' ) {
    // posts later than dynamic date
    $where .= " AND post_date >= '" . date('Y-m-d H:i:s', strtotime($GLOBALS['start_date'])) . "'";
    return $where;
}

Затем удалите фильтр, если вы просто хотите запустить его для одного запроса.

3 голосов
/ 26 апреля 2011

Это нужно для получения сообщений за последние 30 дней. Однако помните, что этот код, размещенный в вашем файле functions.php или в плагине, будет фильтровать ваши сообщения ВЕЗДЕ. Если вы хотите, чтобы он фильтровался только на некоторых страницах, либо оберните его в условные теги, либо используйте его на странице шаблона:

<?php
  function filter_where($where = '') {
    // Posts in the last 30 days
    $where .= " AND post_date > '" . date('Y-m-d', strtotime('-30 days')) . "'";
    return $where;
  }
add_filter('posts_where', 'filter_where');
query_posts($query_string);
?>

Я украл этот код прямо из: http://wordpress.org/support/topic/show-the-posts-published-before-a-specific-date?replies=2#post-1066144,, где есть более подробное обсуждение этой проблемы, и есть больше примеров, если это не дает именно то, что вы хотели.

1 голос
/ 26 апреля 2011
<?php
// Show post from a theme option where posts_month is the month 1-12 and posts_year is the year (4 dig)

$month = get_option( 'posts_month' );
$year = get_option( 'posts_year' );

$query = new WP_Query( 'year=' . $year . '&monthnum=' . $month );
0 голосов
/ 11 августа 2016

Если вы не хотите выполнять какую-либо работу по кодированию, то это возможно с помощью плагина для составления списка сообщений WordPress . С его помощью вы можете отображать сообщения в определенном диапазоне дат.

Просто укажите даты начала и окончания. Вы можете отображать сообщения за сегодня, за текущую неделю, за последнюю неделю, за этот месяц и за последний месяц. Вы можете отображать публикации, опубликованные за последние N дней, если предопределенные опции вам не подходят

...