WordPress SLUGS: переопределить категории страницами?

#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' );