Kozack
@Kozack
Thinking about a11y

Как использовать single-1.php и single-2.php в wordpress

Я уже задавал подобный вопрос, но не получил ни одного ответа, поэтому пишу ещё раз.

Как сделать динамичный вывод одного и того же поста? Точнее:
Изначатьно адрес в Wordpress имеет вид
http://site.com/?p=6
Где 6 — это ID поста которого нужно отобразить. Отображается он по шаблону заданному в single.php.
Суть вопроса состоит в том, как добавить в wordpress аналог single.php таким образом, чтобы при запросе по адресу
http://site.com/?p=6 или http://site.com/post-name.html отображалась страница по формату single.php, а при запросе
http://site.com/play/?p=6 или http://site.com/play/post-name.html отображалась страница по формату single-2.php.
  • Вопрос задан
  • 3989 просмотров
Решения вопроса 1
rOOse
@rOOse
Frontend developer
Мне кажется запрос вида site.com/play/?p=6 лучше переделать в что-то типа site.com/?p=6&play=true, тогда появится возможность в single.php проверять play и подключать соответственно single1.php или single2.php.
А вот чтобы получить site.com/play/post-name.html, то есть при включенных пермалинках, это надо уже добавлять rewrite rules, как было отвечено Suvitruf'ом
Ответ написан
Пригласить эксперта
Ответы на вопрос 5
Suvitruf
@Suvitruf
Java/node.js/game-dev
Очевидно, что на уровне маршрутов нужно что-то менять.

Можно добавить в functions.php (но я бы не советовал, ибо при обновлении движка затрётся всё) или же в виде плагина (самый лучший вариант) код, который новые маршруты пропишет.
Вроде как метод add_rewrite_rule для этого есть.

Или же использовать готовый плагин — WP Router.
Ответ написан
Комментировать
danielnewman
@danielnewman
Front-end
Типа такого для постов?
Скрытый текст
image
Ответ написан
mrspd
@mrspd
Все что вам надо описано здесь codex.wordpress.org/Theme_Development — секция Query-based Template Files и здесь codex.wordpress.org/Conditional_Tags
Ответ написан
Комментировать
rOOse
@rOOse
Frontend developer
Не знаю какие у вас пермалинки, я у себя на стандартных «Post name» только что проверил, так как база у меня пустая проверял по быстрому так:
add_rewrite_tag('%play%','([^&]+)');
add_rewrite_rule('play/hello-world/?$','index.php?p=11&play=true','top');

то есть если все работает то должен загрузится пост с id 11, так вот все норм работает, в адресной строке wp36b1/play/hello-world/ а на странице пост с id 11.
Когда ВП настроен на работу с пермалинками, все GET запросы(и POST думаю тоже) заносятся в $wp_query, а вы просто уже проверяете значение play(если он есть) в $wp_query(у меня при проверке он есть play=true), если вы пишите плагин, то проверку GET тоже надо оставить.
Кстати, после каждого добавления/редактирования add_rewrite_rule(и при работе с др. rewrite rule функциями) заходите на страницу wp-admin/options-permalink.php в админке, тогда пермалинки регенерируются.
Ответ написан
Kozack
@Kozack Автор вопроса
Thinking about a11y
Спасибо всем за помощь, особенно rOOse.
Как оказалось причиной стольких проблем был установленный у меня плагин WordPress SEO который по каким то причинам «очищал от ненужных» переменных.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы