Фильтрация статей и добавление даты к тегу title
Еще несколько полезных фрагментов кодов для читателей сайта.
Добавляем дату к тегу title ваших статей на сайте.
Иногда для того чтобы показать возраст статьи для поисковых систем используют дату в теге title. Дата в этом теге является метаданными для поисковиков. Сам так не делаю, но думаю, SEO специалисты могут оценить этот код. На мой взгляд, этом может быть полезно для новостных ресурсов.
1 2 3 4 5 |
add_filter( 'wp_title', 'append_to_title', 10, 3 ); function append_to_title($title) { $date = get_the_date(); return $title .= " | ".$date; } |
Еще один просто бомбовый код, честно найденный в байнете )
Думаю многие сталкивались с проблемой, когда сайт начинает разрастаться и на нем много произвольных полей, в которых сложно найти нужную информацию. Например это может быть интернет магазин с полями содержащими тип товара по которому надо отфильтровать все эти товары. Недавно нашел решение этой задачи, как сделать выпадающий список для фильтрации по всем произвольным полям. Список появиться в верху над списком статей в админке.
Для решения этой задачи фильтрации такого типа добавляем код в файл function.php и радуемся результату. Код ниже:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
add_filter( 'parse_query', 'ba_admin_posts_filter' ); add_action( 'restrict_manage_posts', 'ba_admin_posts_filter_restrict_manage_posts' ); function ba_admin_posts_filter( $query ) { global $pagenow; if ( is_admin() && $pagenow=='edit.php' && isset($_GET['ADMIN_FILTER_FIELD_NAME']) && $_GET['ADMIN_FILTER_FIELD_NAME'] != '') { $query->query_vars['meta_key'] = $_GET['ADMIN_FILTER_FIELD_NAME']; if (isset($_GET['ADMIN_FILTER_FIELD_VALUE']) && $_GET['ADMIN_FILTER_FIELD_VALUE'] != '') $query->query_vars['meta_value'] = $_GET['ADMIN_FILTER_FIELD_VALUE']; } } function ba_admin_posts_filter_restrict_manage_posts() { global $wpdb; $sql = 'SELECT DISTINCT meta_key FROM '.$wpdb->postmeta.' ORDER BY 1'; $fields = $wpdb->get_results($sql, ARRAY_N); ?> <select name="ADMIN_FILTER_FIELD_NAME"> <option value=""><?php _e('Filter By Custom Fields', 'baapf'); ?></option> <?php $current = isset($_GET['ADMIN_FILTER_FIELD_NAME'])? $_GET['ADMIN_FILTER_FIELD_NAME']:''; $current_v = isset($_GET['ADMIN_FILTER_FIELD_VALUE'])? $_GET['ADMIN_FILTER_FIELD_VALUE']:''; foreach ($fields as $field) { if (substr($field[0],0,1) != "_"){ printf ( '<option value="%s"%s>%s</option>', $field[0], $field[0] == $current? ' selected="selected"':'', $field[0] ); } } ?> </select> <?php _e('Value:', 'baapf'); ?><input type="TEXT" name="ADMIN_FILTER_FIELD_VALUE" value="<?php echo $current_v; ?>" /> <?php } |
Работу скрипта можно посмотреть на скриншоте:
Код работает отлично, все проверил на тестовой площадке.

/*

- Базовый курс по веб-дизайну;
- Верстка сайтов;
- Общий курс по CMS WordPress и продолжение курса по разработке шаблонов;
- Разработка сайтов на PHP.
Спасибо за отличное дополнение. Протестил код, в целом работает, сортирует по всем произвольным полям, кроме одного, а именно это мне и нужно было.
У меня все записи имеют произвольное поле instock со значением 1 или 0. Сортировка со значением 1 работает нормально, а вот при попытке сортировать записи со значением 0 не получается, фильтр просто тупо выводит все записи рубрики, и со значением 0 и 1.
Похоже код не хочет воспринимать значение 0 произвольного поля instock. Как научить его сортировать и по значению 0?
У меня версия старенькая, 2.7.1, обновить пока не получается из-за несовместимости со сложным плагином онлайн магазина.
Спасибо.
Постараюсь вечером посмотреть
Это реально радует. И да, только что проверил, фильтр работает и со значением 00, только 0 не воспринимает.
Ещё раз спасибо.
Только что на тестовой площадке добавил 3 записи с новым произвольным полем. Для двух сделал значение 0, а для одного 1. В результате получилось отсеять только по нулевому значению, в результате получил 2 записи и по значению «1» тоже получил одну запись. Может что-то не так делаете, или может я вопроса не понял?
Видимо у меня что-то не так с wordpress инсталляцией, вопрос правильно поняли, у меня по прежнему не удаётся сортировать по значению 0.
Думаю что-же делать.
Попробуй сделать другое произвольное поле с теми же параметрами, чтобы содержало 0 и 1, и попробуй по нему фильтровать. Если не получится, то возможно и в WordPress проблема. Можешь на тестовой площадке пробовать обновлять CMS, главное чтобы копия базы и файлов была )
Спасибо за удачную мысль, попробовал задать значение 0 другому полю и сортировка по 0 работает нормально. Значит проблема не в значении 0 и не в WordPress а именно в этом конкретном поле instock, именно в этом поле не получается сортировать по значению 0.
Рад что получилось, если что пишите как решите задачу полностью.