• У меня на главной странице есть блок (который имеет свое оформление) с анонсами. Естественно, когда они уже являются неактуальными, они продолжают висеть, если новые анонсы не постяться…

    Хотелось бы сделать через кастом-филдз такую возможность задавать дату, до которой анонсы актуальны.

    По-идее, должно было бы сработь такое решение

    function filter_where($where = '') {
        $expDate = date( 'Y-m-d', strtotime( get_post_meta($post->ID, 'aexp', true) ) );
        $where .= " AND '" .$expDate >= date('Y-m-d', strtotime('-1 days')) . "'";
        return $where;
      }
    add_filter('posts_where', 'filter_where');
        $args=array(
          'post_type' => 'post',
          'post_status' => 'publish',
          'cat'=>28,
          'posts_per_page' => 2
          );
    $my_query=new WP_Query($args);
    remove_filter('posts_where', 'filter_where');
    
      if( $my_query->have_posts() ) {
        echo '<h2>Number of posts is '.count($my_query->posts) . '</h2>';
        while ($my_query->have_posts()) : $my_query->the_post(); ?>
          <p><small><?php the_time('d.m.y') ?></small> <a>" rel="bookmark" title="Permanent Link to <?php the_title_attribute(); ?>"><?php the_title(); ?></a></p>
         <?php
        endwhile;
      } else {echo "Нема постів!";} 
    
    //if ($my_query)
    wp_reset_query();

    Но не сработало — посты выводятся, но плевать они хотели на дату и кастом филдз )) 🙁

    Может кто-то знает как можно реализовать подобную, но рабочую схему?

Просмотр 13 ответов — с 1 по 13 (всего 13)
  • Returns posts for just the current date:

    $today = getdate();
    query_posts('year=' .$today["year"] .'&monthnum=' .$today["mon"] .'&day=' .$today["mday"] );

    codex

    ну вообюще то мне не за тудей надо, а за определенный период

    ну вообще то я дал ссылку на кодекс, устанавливайте любые временные параметры.

    Ну это все понятно. Но повторю задачу
    В пост анонса вбивается через кастом филдз дата, до которой анонс актуален. И в блоке анонсов должны выводится автоматом посты анонсов, которые актуальны, т.е. значение даты, зданное в кастом филдз должно быть меньше или равно текущей дате — лишь тогда пост выводится.

    По моему, с помощью стандартный настроек квери пост проблема не решается…

    Можно внутри цикла получать мета-поле сравнивать его с текущей датой. Только тогда надо получать заведомо большее количество записей и сделать счетчик на количество выведенных записей, чтобы показывать строго n элементов.

    Или вот еще пример оттуда же, чуть посложней, но зато более правильный:

    <?php
    //Create a new filtering function that will add our where clause to the query
    function filter_where($where = '') {
      //posts for March 1 to March 15, 2009
      $where .= " AND post_date >= '2009-03-01' AND post_date < '2009-03-16'";
      return $where;
    }
    // Register the filtering function
    add_filter('posts_where', 'filter_where');
    // Perform the query, the filter will be applied automatically
    query_posts($query_string);
    ?>

    Кодекс для кого пишется?

    Кодекс для кого пишется?

    А вы посмотрите мой первый пост в данной теме. Разве там не такая же конструкция?

    Э…. да.
    Ну, у меня еще один вариант есть.
    Он точно будет работать.

    Буду очень признателен, если вы его покажете )))

    Если бы вы внимательно читали мои сообщения, то увидели бы это:

    Можно внутри цикла получать мета-поле сравнивать его с текущей датой. Только тогда надо получать заведомо большее количество записей и сделать счетчик на количество выведенных записей, чтобы показывать строго n элементов.

    Код писать, извините, некогда.

    Полагаю, вы это имели в виду?

    echo $block_do; // дизайн блока анонсов
    
            $i = 0;
    	query_posts('cat=28');
    	if (have_posts()) :
    		while (have_posts()) :
    			the_post(); ?>
    			<?php $expDate = date( 'Y-m-d', strtotime( get_post_meta($post->ID, 'aexp', true) ) ); ?>
    			<?php if $expDate >= date('Y-m-d', strtotime('-1 days')) { ?>
    <?php
    // регулируем кол-во постов
    if ($i++ <= 2) { ?>
    			<p><small><?php the_time('d.m.y') ?></small> <a>" rel="bookmark" title="Permanent Link to <?php the_title_attribute(); ?>"><?php the_title(); ?></a></p>
    <?php
    // закрываем условие для кол-ва постов
     } ?>
    
    			<?php } ?>
    		<?php endwhile;
    	endif;
    
    echo $block_posle; // конец дизайна анонсов

    Посмотри вот этот плагин, довести до ума и все в порядке)) или на крайняк часть кода вырвать _http://wordpress.org/extend/plugins/random-posts-within-date-range-widget/screenshots/

    Нет, все-таки вы не прониклись моим Тз 🙂 но за ссылку спасибо. Хотя я уже и так с помощью ваших подсказок почти все сделал:

    $i = 0;
    query_posts('cat=28');
    
    // работаем пока постов не будет больше 2-х
    if ($i <= 2) {
    
    if (have_posts()) :
    
    while (have_posts()) :
    the_post(); ?>
    <?php $expDate = date( 'Y-m-d', strtotime( get_post_meta($post->ID, 'aexp', true) ) ); ?>
    <?php if ($expDate >= date('Y-m-d', strtotime('-1 days'))) { ?> 
    
    <?php $i++;
    echo $i." "; ?>
    
    <?php
    // запускаем дизайн блока анонсов
    if ($i = 1) { echo "Запуск!";} ?>
    
    <p><small><?php the_time('d.m.y') ?></small> <a href="<?php the_permalink(); ?>" rel="bookmark" title="Permanent Link to <?php the_title_attribute(); ?>"><?php the_title(); ?></a><?php echo " ".$i; ?></p>
    
    <?php
    // конец условия выборки по кастом-филдз
    }
    
    endwhile;
    
    endif;
    
    // конец условия выборки по кол-ву
    } 
    
    // if ($my_query)
    //wp_reset_query(); //just in case
    
    // закрываем див с дизайном блока анонсов
    if ($i > 1) { echo $i ."Конец!";}

    Все отлично работало!
    Вот только когда я попытался с помощью счетчика запускать открытие и закрытие дивов для этого блока с анонсами, то понял что счетчик как-то странно считает:

    http://www.necu.org.ua/wp-content/uploads/wtf.jpg

    Может кто-то понимает где я ступил?

    Все, во всем разобрался. Может кому-то пригодится…

    Вот готовый рабочий код

    $i = 0;
    query_posts('cat=28');
    
    if (have_posts()) :
    
    while (have_posts()) :
    the_post(); ?>
    <?php $expDate = date( 'Y-m-d', strtotime( get_post_meta($post->ID, 'aexp', true) ) ); ?>
    <?php if ($expDate >= date('Y-m-d', strtotime('-1 days'))) { ?> 
    
    <?php // работаем пока постов не будет больше 2-х
    if ($i < 2) { ?>
    
    <?php $i++; ?>
    
    <?php
    // запускаем дизайн блока анонсов
    if ($i == 1) { echo $block_do;} ?>
    
    <p><small><?php the_time('d.m.y') ?></small> <a href="<?php the_permalink(); ?>" rel="bookmark" title="Permanent Link to <?php the_title_attribute(); ?>"><?php the_title(); ?></a></p>
    
    <?php
    
    // конец условия выборки по кол-ву
    }
    // конец условия выборки по кастом-филдз
    }
    
    endwhile;
    
    endif;
    
    wp_reset_query(); //just in case
    
    // закрываем див с дизайном блока анонсов
    if ($i > 0) { echo $block_posle;}

    Спасибо всем кто помагал!

Просмотр 13 ответов — с 1 по 13 (всего 13)
  • Тема «Вывод в зависимости от даты» закрыта для новых ответов.