Intereting Posts

Очистить URL-адреса для настраиваемых переменных $ _GET

У меня есть запрос var show=othertemplate который я могу добавить на любой URL, чтобы показывать любую публикацию, страницу или архив в WordPress в другом шаблоне, например: mysite.com/[any URL] /? Show = othertemplate . Я бы хотел, чтобы он был доступен через чистый URL, например [любой URL] / othertemplate или [любой URL] / show / othertemplate .

Я попытался достичь этого, зарегистрировав запрос var с фильтром query_vars и добавив код, как показано ниже, в .htaccess, но WordPress вмешивается и выдает 404. WP Debug Bar говорит, что запрос ищет attachment = print.

 RewriteEngine On RewriteBase / RewriteCond %{REQUEST_URI} !^/index\.php RewriteRule ^(.*)/othertemplate/?$ /index.php/$1?view=othertemplate [L] 

Я также пробовал использовать функции перезаписи WordPress, но то же самое происходит.

 function st_myqueryvars($vars) { $vars[] = 'show'; return $vars; } add_filter('query_vars', 'st_myqueryvars'); function st_myrewriterules( $wp_rewrite ) { $newrules = array(); $new_rules['^(.*)/othertemplate/?$'] = 'index.php/$matches[1]?show=othertemplate'; $wp_rewrite->rules = $new_rules + $wp_rewrite->rules; } add_filter('generate_rewrite_rules','st_myrewriterules'); 

Здесь что-то не хватает?

Обновление: после постоянной очистки я вижу, что эта функция WP переписывает / [любой URL] / шаблон в index.php? Show = template вместо index.php? [соответствующая строка запроса URL] & show = template . Я не могу «жестко закодировать» строку запроса, такую ​​как post_type = $ matches [1] & name = $ matches [2] … в правиле перезаписи, потому что он должен работать для любой страницы / сообщения / архива, которые имеют разные постоянные ссылки структур. Как мне обойти это?

Вы должны взглянуть на «Переписывать конечные точки», которые намного проще в работе, чем пользовательские перезаписи. И они идеально подходят для вашего использования: http://codex.wordpress.org/Rewrite_API/add_rewrite_endpoint

Вы можете добавить конечную точку «show» следующим образом:

 function wpsx_37961_add_endpoints() { // Add the "show" rewrite endpoint to all URLs add_rewrite_endpoint('show', EP_ALL); } add_action('init','wpsx_37961_add_endpoints'); 

Затем вы можете проверить его значение в действии WP (или, может быть, раньше, я не уверен), например:

 function wpsx_37961_check_endpoint() { $show = $wp_query->get( 'show' ); // Now, do whatever template switching you want based on the $show var's value } add_action('wp','wpsx_37961_check_endpoint'); 

Работа по фактическому переключению шаблонов зависит от вас, но это позволяет использовать ваши конечные точки. Нет фильтрационных запросов, нет взлома, переписывают правила, нет жестких вещей 🙂

Посмотрите мой пост здесь . Это должно помочь вам по пути. Ты на правильном пути. Когда вы добавите правило перезаписи, не забудьте сбросить настройки, посетив Settings-> Permalinks