#wordpress #categories #slug
#wordpress #Категории #слизни
Вопрос:
Итак, я работаю над большим медиа-сайтом с использованием WordPress. Я хочу создавать настраиваемые страницы категорий, а не использовать общий шаблон повсюду.
Я знаю, что могу копировать файлы php, переименовывать их и настраивать их. Но я столкнулся с более простым способом, особенно с точки зрения разрешения вносить изменения некодирующим типам. Это просто кажется слишком простым…
Итак, допустим, мои текущие постоянные ссылки / URL-адреса читаются так:
POSTS: domain.com/2016/10/postname.html
CATEGORIES: domain.com/c/category-name/
PAGES: domain.com/page-name/
Я обнаружил, что могу создать страницу и присвоить ей постоянную ссылку / c/, таким образом, это будет выглядеть так:
domain.com/c/
Я обнаружил, что если я создаю дочернюю страницу, используя / c/ в качестве родительской, она выглядит так:
domain.com/c/page-name/
Если я присвою этой странице тот же СЛАГ, что и категории, а затем перейду на страницу, страница переопределит категорию. Чтобы быть более конкретным, допустим, у меня есть категория под названием videos, затем я создаю страницу под / c / родительской страницей, также называемой videos, это происходит:
The PAGE at /c/videos/
overrides the CATEGORY at /c/videos.
Это просто кажется слишком хорошим, чтобы быть правдой? Может ли кто-нибудь увидеть какую-либо причину, по которой я не стал бы действовать подобным образом, особенно когда в будущем сайт будет использоваться некодирующими типами, которые хотели бы иметь возможность легко вносить изменения с помощью панели управления, а не серверной части?
Заранее спасибо.
Комментарии:
1. Хммм, ссылка на категорию видео есть
domain.com/videos
, а ссылка на дочернюю страницу естьdomain.com/c/videos
. Верно?2. Извините, я должен был сказать, что постоянная ссылка для категорий была изменена на /c/ . Итак, до того, как у меня была дочерняя страница, ссылка на категорию видео domain.com/c/videos и как только у меня появилась дочерняя страница, ссылка на дочернюю страницу выглядит следующим образом: domain.com/c/videos . И если я перейду по этому URL-адресу, я перейду на дочернюю страницу, а не на архив категорий.
3. Я пытался это сделать, но в моей установке страница категории переопределяет страницу «страница». Также пытался удалить слизни категорий с помощью плагина Yoast seo … та же проблема с сопоставлением. Посещал страницу постоянных ссылок (и сохранял), чтобы сбросить правила перезаписи, но не пошел…
Ответ №1:
Для этого требуется добавить небольшой фильтр в вашу тему function.php досье. Я взял этот код из другого ответа на StakeOverflow, и вы можете прочитать его здесь
function loadPageFirst() {
// get the actual category
$actualCategory = get_category( get_query_var('cat') );
// get the page with the same slug
$matchingPage = get_page_by_path( $actualCategory->slug );
// If no match, load the normal listing template and exit (edit if you are using a custom listing template, eg. category.php)
if (!$matchingPage) {
include( get_template_directory() . '/archive.php');
die();
}
// Make a new query with the page's ID and load the page template
query_posts( 'page_id=' . $matchingPage->ID );
include( get_template_directory() . '/page.php');
die();
}
add_filter( 'category_template', 'loadPageFirst' );