#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.