Почему у стандартного типа записи has_archive=false

6 июн. 2012 г., 14:42:46
Просмотры: 16.3K
Голосов: 6

У стандартного типа записи post, почему свойство has_archive равно FALSE?

$type_obj = get_post_type_object('post');
var_dump($type_obj->has_archive); // FALSE
4
Комментарии

Потому что нет смысла создавать архив для записей. По умолчанию для всех типов записей установлено значение FALSE.

Eugene Manuilov Eugene Manuilov
6 июн. 2012 г. 15:00:16

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

bpierre bpierre
6 июн. 2012 г. 15:31:38

has_archive Включает архивы для типа записей. По умолчанию будет использоваться $post_type в качестве слага архива. По умолчанию: false Примечание: Сгенерирует правильные правила перезаписи, если rewrite включен. Также используйте rewrite для изменения используемого слага. Это означает, что должен быть архив с адресом http:://mysite.com/post/ - у вас есть такой архив?

Eugene Manuilov Eugene Manuilov
6 июн. 2012 г. 15:49:06

Понял, has_archive следовало назвать has_archive_slug. Спасибо.

bpierre bpierre
6 июн. 2012 г. 15:57:06
Все ответы на вопрос 1
1

Поздний ответ.


has_archive применяется только для аргументов rewrite.

Подробнее

Если has_archive установлен в true, то $archive_slug будет установлен в значение аргумента rewrite['slug']. Если затем установлен аргумент rewrite['with_front'], он будет добавлен в начало. Результат этого будет добавлен как правило перезаписи:

add_rewrite_rule( "{$archive_slug}/?$", "index.php?post_type=$post_type", 'top' );

Если feeds установлен в true и has_archive тоже, то вы также получите перезаписанные правила для фидов:

add_rewrite_rule( "{$archive_slug}/feed/$feeds/?$", "index.php?post_type=$post_type" . '&feed=$matches[1]', 'top' );
add_rewrite_rule( "{$archive_slug}/$feeds/?$", "index.php?post_type=$post_type" . '&feed=$matches[1]', 'top' );

Тот же принцип применяется для rewrite['pages']:

add_rewrite_rule( "{$archive_slug}/{$wp_rewrite->pagination_base}/([0-9]{1,})/?$", "index.php?post_type=$post_type" . '&paged=$matches[1]', 'top' );

Итог:

Если у вас не установлен has_archive в true, то любая попытка добавить перезапись для feeds, pages или архивов закончится большим ?.

14 июн. 2012 г. 14:06:24
Комментарии

Установив has_archive в false, вы можете использовать произвольную страницу в качестве архива.

Tobi G. Tobi G.
18 февр. 2021 г. 16:53:16