Как сделать приоритетной page.php, а не category.php?
Допустим, по ссылке "http://site.com/blog/blog-1/" у нас находится как рубрика blog-1, так и страница blog-1. Я смотрел картинку с иерархией файлов темы и там category.php стоит раньше page.php. Можно их как-то поменять местами? Мне нужно следующее: если по ссылке есть страница, то выводится она. Если нет, то выводится рубрика.
Придумал вариант, как сделать лучше. Это к самому вопросу не относится, но мою изначальную задачу решает. Не знаю насколько это правильно, но вроде работает. Вот, кому интересно:
Страницу 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, за страницу он, кажется, ее не считает.
Нет, моя проблема не решена. Теперь криво работает меню, т.к. из-за одинакового url для рубрик и страниц, он в одном случае считает это страницей, а в другом рубрикой. Я не понимаю как это работает. Но кажется он отдает приоритет тому, что было создано раньше. Если рубрика, то считает это рубрикой. Если раньше создана страница, то считает страницей.
УРЛ парсится правилами перезаписи ЧПУ и порядок нужно менять именно там. Смотрите в сторону хука rewrite_rules_array.
Дело в том что по вашему УРЛ, первым правилом подходит, то которое относится к категории, оно срабатывает и дальше ВП определяет страницу как страницу категории - это конфликт.
Однако даже при изменении порядка правил ЧПУ, все равно могут быть проблемы, потому что в этом случае вы не сможете попасть на страницу категории...
Я вообще, сейчас не понимаю как вы планируете попадать на страницу категории, если по её УРЛ будет открываться страница записи...
Может вам стоит пересмотреть структуру ЧПУ для страниц и категорий?