Отличный вопрос! WordPress назначает номер страницы вашего комментария для запроса var, 'cpage'
который устанавливается /comment-page-1/
в конце вашего URL . Итак, ваш виновник в redirect_canonical()
функции, строка 192 из /wp-includes/canoncial.php
.
if ( get_query_var('paged') || is_feed() || get_query_var('cpage') ) {
Поскольку redirect_canonical()
функция устанавливается как действие, мы можем вставить собственную функцию, которая будет вызываться вместо нее , чтобы наша функция установила для 'cpage'
запроса var значение false
, call redirect_canonical()
, а затем 'cpage'
вернула обратно то, что было; это удержит WordPress от перенаправления на вас.
Чтобы вставить свою собственную функцию, вам нужно вызвать две ловушки 'init'
и тому 'template_redirect'
подобное, поэтому обязательно установите 'init'
ловушку, которая будет вызываться после do_action()
внутреннего ядра WordPress, которое добавляет redirect_canonical()
:
add_action('init','yoursite_init',11); //11=lower priority
function yoursite_init() {
remove_action('template_redirect','redirect_canonical');
add_action('template_redirect','yoursite_redirect_canonical');
}
add_action('template_redirect','yoursite_redirect_canonical');
function yoursite_redirect_canonical($requested_url=null, $do_redirect=true) {
$cpage = get_query_var('cpage');
set_query_var('cpage',false);
redirect_canonical($requested_url, $do_redirect);
set_query_var('cpage',$cpage);
}
Тогда, конечно, вам нужно что-то сделать со своим 'cpage'
. Вы можете либо проверить возвращаемое значение, get_query_var('cpage')
либо добавить еще один хук, чтобы позволить вам создать шаблон для комментария, что я и сделал. Это добавит вид для шаблона темы файла с таким же , как это было бы нормально загружаться , но с [comments].php
в конце имени вместо .php
, то есть single[comments].php
. Обратите внимание, что для этого фильтра я установил приоритет 11; вам может потребоваться установить еще большее число, если используемый вами плагин добавляет себя после вашего хука:
add_filter('single_template','yoursite_single_template',11);
function yoursite_single_template($template) {
if (get_query_var('cpage'))
$template = str_replace('.php','[comments].php',$template);
return $template;
}
И вот доказательство того, что все это работает!
(источник: mikeschinkel.com )