Фильтрация статей и добавление даты к тегу title
Еще несколько полезных фрагментов кодов для читателей сайта.
Добавляем дату к тегу title ваших статей на сайте.
Иногда для того чтобы показать возраст статьи для поисковых систем используют дату в теге title. Дата в этом теге является метаданными для поисковиков. Сам так не делаю, но думаю, SEO специалисты могут оценить этот код. На мой взгляд, этом может быть полезно для новостных ресурсов.
add_filter( 'wp_title', 'append_to_title', 10, 3 );
function append_to_title($title) {
$date = get_the_date();
return $title .= " | ".$date;
}
Еще один просто бомбовый код, честно найденный в байнете )
Думаю многие сталкивались с проблемой, когда сайт начинает разрастаться и на нем много произвольных полей, в которых сложно найти нужную информацию. Например это может быть интернет магазин с полями содержащими тип товара по которому надо отфильтровать все эти товары. Недавно нашел решение этой задачи, как сделать выпадающий список для фильтрации по всем произвольным полям. Список появиться в верху над списком статей в админке.
Для решения этой задачи фильтрации такого типа добавляем код в файл function.php и радуемся результату. Код ниже:
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.
Рад что получилось, если что пишите как решите задачу полностью.