Отображение содержимого страницы с использованием нескольких шаблонов – WordPress

Возможно ли иметь такую ​​страницу, как: www.site.com/page/

и показать различные шаблонные версии, используя, скажем:

www.site.com/page/?template=default

www.site.com/page/?template=archive

…?

Таким образом, он извлекает один и тот же контент страницы, но отображает его по-разному.

Возможно ли это с помощью WordPress? Является ли это стандартным или для этого потребуется какой-то tomhackery?

спасибо

Создайте шаблон «master» и назначьте его на свою страницу. Мастер-шаблон не содержит никакой информации о макете – всего лишь набор условных операторов include, которые выбирают «реальный» шаблон на основе переменной GET. Шаблон мастера может выглядеть примерно так:

<?php switch ($_GET["template"]) { case "foo": include(TEMPLATEPATH . "/foo.php"); break; case "bar": include(TEMPLATEPATH . "/bar.php"); break; case "baz": include(TEMPLATEPATH . "/baz.php"); break; default: include(TEMPLATEPATH . "/default_template.php"); break; } ?> 

Я ответил на аналогичный вопрос минуту назад.

Вручную установить шаблон с помощью PHP в WordPress

Ответ выше должен работать, но использование TEMPLATEPATH, я думаю, не является идеальным, он также, кажется, не использует то, что WordPress уже делает, чтобы выбрать шаблон.

 function filter_page_template($template){ /* Lets see if 'template is set' */ if( isset($_GET['template']) ) { /* If so, lets try to find the custom template passed as in the query string. */ $custom_template = locate_template( $_GET['template'] . '.php'); /* If the custom template was not found, keep the original template. */ $template = ( !empty($custom_template) ) ? $custom_template : $template; } return $template; } add_filter('page_template', 'filter_page_template'); 

Выполняя это таким образом, вам не нужно добавлять новую строку для каждого шаблона, который вы хотите указать. Кроме того, вы используете существующую иерархию шаблонов и учитываете возможность ввода несуществующего шаблона.

Я хотел бы указать, что вы должны сделать некоторую валидацию против значения $ _GET ['template'] перед его использованием, но также можете захотеть сохранить список, который нужно проверить, чтобы они не могли использовать любой старый шаблон.