Intereting Posts
Почему неправильно использовать admin_print_scripts- {hook} для вставки файла сценария (.js)? Проверьте, имеет ли текущий пользователь сообщение в типе сообщения и является ли авторская роль Гость Автор – Как я могу использовать пользовательские поля для создания ссылки на автора? Пользовательский JS API динамически добавляет разделы и элементы управления Как отобразить заголовок страницы + ссылку на страницу, созданную пользователем Вход с последовательным паролем Показать все сообщения на форуме Стабильный тег плагина в файле readme Исключить категорию текущего сообщения javascript не загружается Если изображение не установлено, отображается default.png из ядра Мне действительно нужна запись в классе? Выбирать все сообщения, в которых зарегистрированный пользователь прокомментировал Пожалуйста, объясните, как WordPress работает с набором символов MySQL и сортировкой на низком уровне Лучший способ организовать данные в этом сценарии

Использование динамических условий в фильтре 'posts_where'

У меня есть следующий код, который дает сообщения, которые публикуются за последние 100 дней

function smbd_cats_by_days ($where = '') { $where .= " AND post_date < '" . date('ym-d', strtotime("-100 days")) . "'"; return $where; } add_filter('posts_where', 'smbd_cats_by_days'); 

Он работает нормально. Но теперь я хочу сделать эту функцию общей. (т. е. я хочу, чтобы количество дней сохранялось в переменной вместо жесткого кодирования как 100.

Как это сделать?

Solutions Collecting From Web of "Использование динамических условий в фильтре 'posts_where'"

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

 function smbd_cats_by_days ($where = '') { // global $days_limit; // if a variable // $days_limit = DAYS_LIMIT; // if a constant // $days_limit = get_option('days_limit',100); // you have to uncomment one of the above, // depending on your choice of mechanisms $where .= " AND post_date < '" . date('ym-d', strtotime("-{$days_limit} days")) . "'"; return $where; } add_filter('posts_where', 'smbd_cats_by_days'); 

http://codex.wordpress.org/Function_Reference/get_option

Вы можете использовать анонимную функцию в соответствии с этим сообщением в блоге , в котором используется функция «на лету» для фильтра posts_where :

 $options = array( 'max_post_age' => '30 days' ); $age_filter = function ($where = '') use ( $options ) { $where .= " AND post_date > '" . date( 'Ym-d', strtotime( '-' . $options[ 'max_post_age' ] ) ) . "'"; return $where; }; add_filter('posts_where', $age_filter); $query = new WP_Query($args); remove_filter('posts_where', $age_filter); 

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

Также стоит отметить, что WordPress 3.7 будет иметь новый набор очень удобных параметров даты, добавленных в WP_Query .

EDIT: Как я обнаружил себя прошлой ночью, функция Lambda (т.е. function ($where = '') use ( $options ) ) доступна только в PHP 5.3+ .