Какой URL для архива категории?

7 февр. 2011 г., 19:03:36
Просмотры: 20.1K
Голосов: 5

Если URL моей категории:

/blogs/category/foo

а URL архива:

/blogs/2011/02/

каким будет URL для записей категории 'foo' за февраль 2011?

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

/blogs/category/foo/?y=2011&monthnum=02

t31os t31os
7 февр. 2011 г. 23:23:30

@t31os: Если перенести это в ответ, мы могли бы расширить его правилами перезаписи, чтобы получить красивые URL!

Jan Fabry Jan Fabry
8 февр. 2011 г. 12:10:24

Разве любые правила, написанные для такого URL, не будут конфликтовать с правилами для подкатегорий? Думаю, именно поэтому таких правил не существует - как отличить URL категории, основанный на дате, от URL просто подкатегории. Можете включить мое предложение в свой ответ, если хотите.

t31os t31os
8 февр. 2011 г. 12:33:49

@t31os: Хм, это должно быть возможно... С помощью нежадного регулярного выражения, так как архив по дате заканчивается цифрами. Я подумаю над этим и, возможно, вернусь с полным ответом!

Jan Fabry Jan Fabry
8 февр. 2011 г. 14:47:26

@t31os: Я расширил свой ответ, добавив правила перезаписи для навигации по датам. Как я и предполагал, нежадные правила перезаписи делают это возможным.

Jan Fabry Jan Fabry
9 февр. 2011 г. 17:00:46

Отличная работа, кажется, это решает проблему... :) +1

t31os t31os
10 февр. 2011 г. 15:43:08

Попробуйте это: ?y=2016&monthnum=01&orderby=date&order=ASC Это просто пример, измените год и месяц.

gfo95 gfo95
30 дек. 2022 г. 21:43:56
Показать остальные 2 комментариев
Все ответы на вопрос 2
1

Нет архивов по датам для категорий. Страницы вида /category/[слаг]/ уже являются "архивами", так как отображают старые записи на разных страницах.

Доступ к разным страницам осуществляется путем добавления к URL page/2/, page/3/, и так далее. Для добавления ссылок на эти страницы используются теги шаблонов next_posts_link() и previous_posts_link().

Если вы хотите добавить фильтрацию по дате к архивам категорий, можно добавить правило перезаписи URL для соответствия году, опционально месяцу и опционально нумерации страниц.

add_filter( 'category_rewrite_rules', 'wpse8769_category_rewrite_rules' );
function wpse8769_category_rewrite_rules( $category_rules )
{
    global $wp_rewrite;
    // Это может работать некорректно для сложных структур постоянных ссылок, проверено только в простых случаях
    $category_permastruct = str_replace( $wp_rewrite->rewritecode, $wp_rewrite->rewritereplace, $wp_rewrite->get_category_permastruct() );
    $category_permastruct = preg_replace( '|^/+|', '', $category_permastruct );

    $category_extra_rules = array(
        // Или можно разбить на разные правила перезаписи, если регулярное выражение слишком сложное
        // RSS-ленты оставляем как упражнение для читателя
        $category_permastruct . '/([0-9]{4})(/([0-9]{1,2}))?(/page/([0-9]+))?/?$' =>
            'index.php?category_name=$matches[1]&year=$matches[2]&monthnum=$matches[4]&paged=$matches[6]',
    );

    return $category_extra_rules + $category_rules;
}
7 февр. 2011 г. 19:06:50
Комментарии

Мой URL /category/[slug]/ отображает только 10 последних записей без ссылок на остальные. Можно ли как-то добавить пагинацию?

Bobby Jack Bobby Jack
7 февр. 2011 г. 20:28:39
2

Вопрос: какой URL у блогов 'foo' за февраль 2011 года?

URL в контексте вашего сайта будет: /blogs/category/foo/?y=2011&monthnum=02

(Я откровенно скопировал это из комментария t31os, так что ему спасибо за это)

9 февр. 2011 г. 17:43:27
Комментарии

К сожалению, это не совсем работает. Ограничение по месяцу (февраль) работает нормально, но фильтр по году не применяется, поэтому я получаю записи за февраль 2011, февраль 2010 и т.д.

Bobby Jack Bobby Jack
11 февр. 2011 г. 13:35:48

... и если я изменю "y=2011" на "year=2011", то происходит перенаправление на /blogs/2011/02/, при этом теряется категория

Bobby Jack Bobby Jack
11 февр. 2011 г. 13:37:39