WordPress / PHP - добавление класса в пост по истечении срока - PullRequest
1 голос
/ 23 мая 2011

В WordPress я добавил на страницу своих сообщений настраиваемое поле с именем «post-expiry», в которое я ввожу дату истечения срока действия, отформатированную следующим образом: «2011-04-28».

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

Поэтому мне нужно разработать PHP-функцию, которая будет размещаться в пост-цикле WordPress, который проверяет дату, введенную в мета моего настраиваемого поля, проверяет фактическую дату (возможно, с помощью веб-сервера или службы времени в Интернете), а затем применяет класс к выводу, если дата прошла.

У кого-нибудь есть идеи о том, как бы я закодировал эту функцию? Я все еще довольно новичок в PHP, но думаю, что это возможно.

Ответы [ 2 ]

1 голос
/ 23 мая 2011

WordPress позволяет подключать метод post_class () , чтобы вы могли делать что-то чисто в вашем functions.php, скажем:

// Add a class to post_class if expiry date has passed.
function check_expiry_date( $class = '' ) {
  $custom_fields = get_post_custom_values('post-expiry');
  if ($custom_fields) {
    // There can be multiple custom fields with the same name. We'll
    // just get the first one using reset() and turn it into a time.
    $expiry_date = strtotime(reset($custom_fields));

    if ($expiry_date && $expiry_date < time()) {
      if (!is_array($class)) {
        // We were passed a string of classes, so I'll turn that into an array
        // and add ours onto the end. The preg_split is what WP's get_post_class() 
        // uses to split, so I nicked it :)
        $class = preg_split('#\s+#', $class);
      }
      // Now we know we've got an array, we can just add our new class to the end.
      $class[] = 'expired';
    }
  }
  return $class;
}

add_filter('post_class', 'check_expiry_date');

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

Кроме того, вы можете использовать это отдельно в качестве functions.php дочерней темы , чтобы добавить функциональность без изменения родительской темы..

1 голос
/ 23 мая 2011

Я не уверен, что это за имена переменных WordPress (вам нужно это посмотреть: p), но вот как будет выглядеть функция:

<?= time() > strtotime( $post-expiry ) ? 'expired' : '' ?>

strtotime() превращает строку в метку времени Unix, а time() получает метку времени сервера Unix.

Функция может быть помещена прямо в class=" " часть любого элемента, к которому вы хотите применить.

Надеюсь, это поможет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...