Как сделать ссылку на самый свежий пост в категории?

4 янв. 2014 г., 20:47:10
Просмотры: 13.9K
Голосов: 5

Как можно создать ссылку на категорию, которая ведет на её самый новый/свежий пост?

Мне нужно отображать именно пост, а не страницу категории с одним постом в списке. Я знаю, что звучу немного наивно... :)

Но в моем иногда бурном и безграничном воображении что-то подобное уже должно быть доступно:

domain.com/category-name/index.php?newest

или

domain.com/category/category-name/index.php?latest&wpusers=happier-now

Я искал и нашел много решений на уровне PHP. Но этот сайт не позволяет мне разместить более двух ссылок, так что простите за ограничение.

...и для справки вот лучшие из найденных мной ссылок (некоторые полностью в тему, но устарели, и я не знаю, работают ли они в текущих версиях WordPress):

Решено

Ссылка на самый новый пост в категории?

Ссылка на последний пост в категории

У меня было около десятка других релевантных ссылок...

Но снова - мне кажется, что не должно быть необходимости использовать только PHP, функции или шаблоны для этого. Есть же столько крутых возможностей добавления ?этого и &того в URL, что должен быть и параметр для получения последнего поста.

Хороший пример - ссылка на плейлист YouTube. Она загружает последнее видео и позволяет использовать параметры вроде &height &width &rel=0.

Честно говоря, я удивлен, что это не базовая функция WordPress.

Сейчас у меня есть несколько вариантов виджетов, которые могут показывать свежий или избранный пост на главной странице с кратким описанием и изображением. Когда кто-то кликает на заголовок, изображение или "Читать далее", они попадают на этот пост.

Так что я вижу, что виджеты могут создавать такие ссылки - просто мне не хватает знаний, чтобы использовать тот же концепт для создания ссылки без отображения всего содержимого.

1
Комментарии

Вам следует опубликовать ваше решение в качестве ответа

Pieter Goosen Pieter Goosen
20 мая 2014 г. 17:54:03
Все ответы на вопрос 1
0
11

Это не встроено в ядро WordPress, но вполне возможно добавить такой функционал. Однако я не считаю хорошей идеей иметь одну запись доступной по нескольким URL, поэтому перенаправление, вероятно, будет лучшим решением. Конечно, это потребует немного PHP, так как WordPress работает не на магии или силе воли.

Сначала мы подключаем функцию к действию parse_request, которое выполняется, когда WordPress определяет, как установить query vars для основного запроса.

Следующий фрагмент кода предполагает, что включены красивые постоянные ссылки (pretty permalinks), и URL категорий имеют префикс. При этих условиях устанавливается query var category_name, поэтому мы можем проверить, является ли запрос запросом категории. Одновременно мы также проверяем, установлен ли GET-параметр latest, поэтому вместе этот код сработает, когда URL выглядит так:

http://example.com/category/some-category/?latest

Если эти условия выполняются, мы запрашиваем одну запись в указанной категории с помощью WP_Query, который по умолчанию вернет нам последнюю запись в этой категории.

Если запись найдена, мы перенаправляем на её URL с помощью wp_redirect.

Этот фрагмент кода можно добавить в файл functions.php вашей темы:

function wpa_latest_in_category_redirect( $request ){
    if( isset( $_GET['latest'] )
        && isset( $request->query_vars['category_name'] ) ){

        $latest = new WP_Query( array(
            'category_name' => $request->query_vars['category_name'],
            'posts_per_page' => 1
        ) );
        if( $latest->have_posts() ){
            wp_redirect( get_permalink( $latest->post->ID ) );
            exit;
        }

    }
}
add_action( 'parse_request', 'wpa_latest_in_category_redirect' );
9 янв. 2014 г. 04:34:45