Моя настраиваемая страница «Домашняя страница» настроена на сортировку моих настраиваемых сообщений с помощью настраиваемого поля даты с этим (обновленным, чтобы иметь произвольное имя) кодом в functions.php:
// sort order for home page
add_action('wp', 'wwgo_check_page');
function wwgo_check_page () {
if (is_page()) {
add_filter('get_previous_post_sort', 'sort_it');
add_filter('get_next_post_sort', 'sort_it');
add_filter('posts_orderby', 'sort_it' );
add_filter('posts_join', 'join_it' );
add_filter('posts_where', 'where_it' );
function sort_it () {
global $wpdb;
return " $wpdb->postmeta.meta_value ASC ";
}
function join_it( $join ) {
global $wpdb;
$join .= " LEFT JOIN $wpdb->postmeta ON($wpdb->posts.ID = $wpdb->postmeta.post_id) ";
return $join;
}
function where_it( $where ) {
global $wpdb;
$where .= "AND $wpdb->postmeta.meta_key = 'deadline' ";
return $where;
}
}
}
Который денди и простой. Сейчас же. Я хочу, чтобы это работало на всем сайте. Я хочу, чтобы записи на страницах архива, категории и т. Д. Сортировались первыми по настраиваемому полю даты.
Любые идеи?
Я пытался изменить ' if
' на, is_archive()
но это не имело никакого эффекта. Я <! is_single()>
тоже пытался .
Я уверен, что это должно быть что-то простое. Но я новичок в php и, следовательно, невежественен.
Вот сайт , где вы можете видеть, что домашняя страница хорошо отсортирована, но если вы нажмете «поэзия» (единственная с несколькими постами), сортировка не будет работать.
Любые предложения будут встречены с большой радостью.
Спасибо, пожалуйста.
josh_
чтобы избежать именования коллизий.Ответы:
Используйте
query_vars
или запрос фильтра, чтобы добавить,orderby
еслиorderby
не представлен в строке запросаисточник
request
предложение фильтраis_archive()
и так рано, в процессе.Почему вы не используете query_posts ()?
Вы также можете изменить запрос с помощью хука pre_get_posts и выполнить там условную сортировку с помощью is_archive (), is_page () и т. Д.
источник
Я тоже смотрю на ваш другой вопрос .
Если вы хотите отсортировать по мета-значению даты, они, естественно, должны быть в одном и том же формате - я предполагаю, что это PHP-формат даты ('m-y'), который вы указали в своем коде?
Если это так, вы можете обнаружить, что если вы измените свой
meta_value
код,meta_value_num
вы получите лучший результат?Не уверен, что это сработает, но, возможно, стоит попробовать.
источник