Установка пользовательских страниц вместо страниц категорий / архивов

#php #wordpress #categories #custom-pages

#php #wordpress #Категории #пользовательские страницы

Вопрос:

Я пытаюсь установить пользовательские страницы вместо страниц категорий / архивов WordPress по умолчанию.

Я скопировал следующий скрипт в тему function.php , я упоминаю, что сайт использует тему 7.

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

Я взял это отсюда, это решение bencergazda.

Теперь, после скрипта, если я создаю страницу, которая имеет тот же URL, что и страница категории, она автоматически заменяет ее.

Проблема в том, что скрипт ограничен основной (родительской) категорией.

Я хочу создать дочернюю страницу (скажем example.com/cars/european/german ), который автоматически заменяет ту же страницу дочерней категории.

Мой вопрос в том, как изменить сценарий, чтобы включить дочерние элементы категории.

Ответ №1:

Запустите попытку с этим:

 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
    global $post; $post->ID = $matchingPage->ID;
    query_posts( 'page_id=' . $matchingPage->ID );
    include( get_template_directory() . '/page.php');
    die();
}
add_filter( 'category_template', 'loadPageFirst' );
  

Ответ №2:

Вы можете легко сделать это с помощью шаблонов. Используйте дочернюю тему и создайте шаблон с именем category-$slug.php и замените $slug на slug, для которого вы хотите создать страницу. Вы также можете просто создать category.php . Для получения дополнительных опций проверьте эту иерархию шаблонов.

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

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