WordPress как на ладони
rgbcode is looking for WordPress developers.

Как сделать приоритетной page.php, а не category.php?

Допустим, по ссылке "http://site.com/blog/blog-1/" у нас находится как рубрика blog-1, так и страница blog-1. Я смотрел картинку с иерархией файлов темы и там category.php стоит раньше page.php. Можно их как-то поменять местами? Мне нужно следующее: если по ссылке есть страница, то выводится она. Если нет, то выводится рубрика.

Заметки к вопросу:
tyllerdrdn 3 месяца назад

Придумал вариант, как сделать лучше. Это к самому вопросу не относится, но мою изначальную задачу решает. Не знаю насколько это правильно, но вроде работает. Вот, кому интересно:

Страницу page.php вообще решил не использовать. Только category.php, в которой написал следующее

$Path=$_SERVER['REQUEST_URI'];
if(get_page_by_path($Path) !== null){
	echo 'страница есть';
	и дальше вывожу ее заголовок и контент
}else{
	echo 'страницы нет';
	код страницы category.php
}

И все, иерархию шаблона менять не пришлось. Но и здесь я нагуглил. Это уже относится к вопросу, который я не снимаю

function change_template_hierarchy($template_hierarchy) {

	$Path=$_SERVER['REQUEST_URI'];

	if (get_page_by_path($Path) !== null) {
		$template_hierarchy = array(
			'page.php',
			'category.php',
			'archive.php',
			'index.php'
		);
	} else {
		$template_hierarchy = array(
			'category.php',
			'archive.php',
			'index.php'
		);
	}
	return $template_hierarchy;
}
add_filter('category_template_hierarchy', 'change_template_hierarchy');

Это в functions.php. И да, если есть по этому пути страница, то он выводит страницу, а не рубрику. Но функции get_the_title() и the_content() почему-то не выводят заголовок и контент страницы. Они выводят контент какой-то записи. Не знаю в чем причина, но несмотря на то, что wordpress использует файл page.php, за страницу он, кажется, ее не считает.

tyllerdrdn 3 месяца назад

Нет, моя проблема не решена. Теперь криво работает меню, т.к. из-за одинакового url для рубрик и страниц, он в одном случае считает это страницей, а в другом рубрикой. Я не понимаю как это работает. Но кажется он отдает приоритет тому, что было создано раньше. Если рубрика, то считает это рубрикой. Если раньше создана страница, то считает страницей.

0
tyllerdrdn
3 месяца назад
  • 0
    Kama9751

    УРЛ парсится правилами перезаписи ЧПУ и порядок нужно менять именно там. Смотрите в сторону хука rewrite_rules_array.

    Дело в том что по вашему УРЛ, первым правилом подходит, то которое относится к категории, оно срабатывает и дальше ВП определяет страницу как страницу категории - это конфликт.

    Однако даже при изменении порядка правил ЧПУ, все равно могут быть проблемы, потому что в этом случае вы не сможете попасть на страницу категории...

    Я вообще, сейчас не понимаю как вы планируете попадать на страницу категории, если по её УРЛ будет открываться страница записи...

    Может вам стоит пересмотреть структуру ЧПУ для страниц и категорий?

    Комментировать
На вопросы могут отвечать только зарегистрированные пользователи. Вход . Регистрация