Intereting Posts
WordPress – запрос wpdb не отображает тот же результат, что и sql-запрос Разрешить пользователю публиковать, но не редактировать или удалять Как правильно загрузить другую версию основного меню на основе языка пользователя в WordPress? Это хорошее решение? Глубина пачки WordPress Как удалить собственный архив типа сообщения Тип персонализированного сообщения типа Pretty Проверьте, является ли термин в таксономии? Отзывчивый вопрос со вторичным логотипом – не придерживаться позиции Подписка на подписку, изменение роли пользователя при завершении подписки Попытка исключить пользовательские сообщения в зависимости от даты, а сортировка по настраиваемому полю Как отображать страницы с пользовательскими полями на одной странице как установить ссылку в WordPress так, чтобы при нажатии на нее не открывалась другая страница, а в нижней части той же страницы Категория foreach Paging Формирование отображения даты публикации, за пределами цикла Как построить несколько мета-ящиков

Принудительный шаблон, основанный на URL-адресе

Когда пользователь просматривает URI, начинающийся с «/ forums», WordPress должен вызывать указанный шаблон. Например, все эти URL-адреса:

  • mysite.com/forums
  • mysite.com/forums/questions
  • mysite.com/forums/questions/1/my-question
  • mysite.com/forums/questions/ask
  • mysite.com/forums/users

… должен вызвать следующий шаблон: mytheme / page-forums.php

Я считаю, что это связано с WP_Rewrite , но я не знаю , что делать дальше.

Есть идеи?

Я включил некоторый код, который я использую, когда мне нужно сделать дополнения к правилам перезаписи WordPress. Он вводит дополнительные правила в обычную логику перезаписи WordPress, поэтому вы можете направить WordPress на определенные файлы шаблонов на основе URL-адреса. Вы можете изменить его в соответствии с вашими потребностями, добавив дополнительные правила функции create_rewrite_rules () и дополнительные query_vars к функции add_query_vars ().

<?php // Forums Class // $ForumsCode = new Forums(); register_activation_hook( __file__, array($ForumsCode, 'activate') ); add_filter('rewrite_rules_array', array($ForumsCode, 'create_rewrite_rules')); add_filter('query_vars',array($ForumsCode, 'add_query_vars')); add_filter('admin_init', array($ForumsCode, 'flush_rewrite_rules')); add_filter('template_include', array($ForumsCode, 'template_redirect_intercept')); class Forums { function activate() { global $wp_rewrite; $this->flush_rewrite_rules(); } function create_rewrite_rules($rules) { global $wp_rewrite; $newRule = array('forums/(.+)' => 'index.php?forumdata='.$wp_rewrite->preg_index(1)); $newRule2 = array('forums/questions/(.+)' => 'index.php?questions=true&forumdata='.$wp_rewrite->preg_index(1)); $newRules = $newRule + $newRule2 + $rules; return $newRules; } function add_query_vars($qvars) { $qvars[] = 'forumdata'; return $qvars; } function flush_rewrite_rules() { global $wp_rewrite; $wp_rewrite->flush_rules(); } function template_redirect_intercept($template) { global $wp_query; if ($wp_query->get('forumdata')) { $template = get_bloginfo('template_url') . '/page-forums.php'; } return $template; } function pushoutput($message) { $this->output($message); } function output( $output ) { header( 'Cache-Control: no-cache, must-revalidate' ); header( 'Expires: Mon, 26 Jul 1997 05:00:00 GMT' ); echo json_encode( $output ); } }