Контент в зависимости от даты

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

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

Я написал что-то типа

// БЛОК АНОНСІВ
        $cat_block = 28; // номер рубрики
    $block_count = 2; // кол-во записей в блоке
        $i = 0;
    query_posts('cat=' . $cat_block . '&posts_per_page=' . $block_count);
        $anonsexpiry = get_post_meta($post->ID, 'aexp', $single = true); ?>  
<?php if($anonsexpiry !== '') {  

} else {
echo $block_do;
   echo '<div class="block"><h1><a href="http://www.necu.org.ua/category/anonsy/">Анонси</a></h1></div><hr>';
    
    if (have_posts()) : 
        while (have_posts()) : 
            the_post();
            require('main-home-loop.php');
        endwhile; 
    endif;
    
echo $block_posle;
}

Теперь осталось две задачи
1. понять как лучше задавать через касотм филдз дату и как ее сравнивать с датой текущего дня
2. сделать как-то так чтобы из выводящихся двух постов публиковались только актуальные (т.е. чтобы каждый из постов проверялся на актуальность…)

Буду признателен за идеи и варианты воплоения (можно спримерами кода 🙂 )

Хотел решить проблему вот таким вот заросом:

$cat_block = 28; // номер рубрики
$block_count = 2; // кол-во записей в блоке
$i = 0;
$todays_date = date('Y-m-d', strtotime('-1 days'));
$expDate = date( 'Y-m-d', strtotime( get_post_meta($post->ID, 'aexp', true) ) );

function filter_where($where = '') {
 
$where = " AND $expDate >= $todays_date ";
  return $where;
}

add_filter('posts_where', 'filter_where');

query_posts($query_string .'cat=' . $cat_block . '&posts_per_page=' . $block_count);

Но чего-то не заработало. Наверное что-то снова напутал…

Ну вот еще переделал.

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 href="<?php the_permalink() ?>" rel="bookmark" title="Permanent Link to <?php the_title_attribute(); ?>"><?php the_title(); ?></a></p>
     <?php
    endwhile;
  } else {echo "<br/>Нема постів!";} 

//if ($my_query)
wp_reset_query();

Посты выводит, но фильтр по датах через кастом филдз всеравно не срабатывает… В чем моя ошибка?

Ю.Б.? 🙂

Шо? 🙂 Боюсь, что через стандартную кверь запрос с кастомфилдом не прокатит, что нужно сочинять свой SQL-запрос.

Собрав идеи с разных форумов, намутил вот такой в принципе рабочий код (по крайней мере, дату в кастом филде он считывает, сравнывает с текущей и выводит только актуальные посты)

$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

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

// работаем пока постов не будет больше 2-х
if ($i <= 2) {

А почему не

if ($i < 2) {

считаем то с нуля. 0, 1 = 2 поста

Ещё

if ($i = 1)

здесь = операция приравнивания, но не сравнения. сравнение в php обозначается ==

Точно! Все кроется в мелочах!

в этом

if ($i = 1)

вся порча была 🙂 Поскольку тут переменной присваивась единица, то код выполнялся некорректно.

Спасибо за наводку!

Итак, готовый рабочий код, если кому-то надо

$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;}

еще раз всем спасибо за подсказки!

Anonymous
Отправить
Ответ на: