Я ответил на ваш точный вопрос на WordPress Ответы (также на сайте StackExchange) только вчера.Вы можете найти этот ответ здесь .Он включал следующие четыре шага:
- Настройка перезаписи URL путем добавления
query_var
, rewrite_tag
и permastruct
, - Обязательно сбросьте правила перезаписив хуке активации плагина или вручную
- Добавление хука фильтра
parse_query
для установки поста query_vars
в качестве поста комментария и отключения липких постов для запроса - Добавление ловушки фильтра
template_include
для фильтрации имени файла шаблона для загрузки файла шаблона для отдельного комментария и, наконец, - Чтобы создать файл шаблона комментария как
/wp-content/themes/%your-theme%/comment.php
.
Опять же, вы можете найти ответ здесь .
Надеюсь, это поможет.
-Майк
ОБНОВЛЕНИЕ:
Ниже приведен полный контент, который я также разместил на WordPress Ответы:
Существует множество различных способов сделать это, некоторые более изящные, чем другие, и практически все из них могут привести к конфликту.с другими плагинами, но игнорируя все это здесьЭто очень близко к тому, что вы просили.:)
Это решение будет поддерживать формат URL, подобный следующему, где %comment_id%
- это числовой идентификатор вашего комментария из таблицы wp_comments
:
http://example.com/comments/%comment_id%/
Сначала необходимо настроить перезапись URL-адреса с помощью следующего кода.Надеюсь, это достаточно очевидно, но не стесняйтесь спрашивать:
$wp->add_query_var('comment_id'); // Add the "behind-the-scenes" query variable that WordPress will use
$wp_rewrite->add_rewrite_tag('%comment_id%', '([0-9]+)','comment_id='); // Define a rewrite tag to match that assigns to the query var
$wp_rewrite->add_permastruct('comment-page', 'comments/%comment_id%'); // Define a URL pattern to match the rewrite tag.
Вам также нужно будет либо вызвать этот код в хуке активации плагина, чтобы очистить правила, либо, если это ваш сайт, выможно просто сохранить постоянные ссылки в административной консоли Настройки> Постоянные ссылки область настроек:
global $wp_rewrite;
$wp_rewrite->flush_rules(false);
Затем добавьте parse_query
фильтр-хук.Это будет вызвано после того, как WordPress проверил запрос.Он проверяет, установлен ли добавленный вами comment_id
query_var, и если да, то проверяет, есть ли у вас нужный URL-адрес.Если да, тогда он загружает массив комментариев, используя get_comment()
, чтобы установить параметр 'p'
(который должен быть установлен в качестве идентификатора записи) для сообщения, связанного с комментарием.Таким образом, когда WordPress запускает запрос, который он будет выполнять, независимо от того, что по крайней мере , он загружает то, что вам нужно в файле шаблона темы comment.php
ниже, и вам не нужно будет запускать другой запроспозже, когда вам это нужно.Этот код также указывает WordPress игнорировать прикрепленные записи с использованием опции со странным именем caller_get_posts
:
add_filter( 'parse_query', 'my_parse_query' );
function my_parse_query( $query ) {
global $wp;
if (isset($query->query['comment_id']) && substr($wp->request,0,9)=='comments/') {
$comment = get_comment($query->query['comment_id']);
$query->query_vars['p'] = $comment->comment_post_ID; // Causes the comment's post to be loaded by the query.
$query->query_vars['caller_get_posts'] = true; // Keeps sticky posts from invading into the top of our query.
}
}
Тем не менее, далее вам нужно подключить код в /wp-includes/template-loader.php
с помощью фильтра template_include
.Это будет вызвано после того, как WordPress проверит запрос и загрузит сообщение для комментария.Здесь вы сначала снова проверите для comment_id
в query_var, а также для URL, который вам нужен.Если это так, мы заменим страницу шаблона /index.php
на /comment.php
, который является файлом шаблона темы, который вам нужно будет создать:
add_filter( 'template_include', 'my_template_include' );
function my_template_include( $template ) {
global $wp,$wp_query;
if (isset($wp_query->query['comment_id']) && substr($wp->request,0,9)=='comments/') {
$template = str_replace('/index.php','/comment.php',$template);
}
return $template;
}
Наконец, теперь вам нужно создать файл шаблона темы, который я выбрал.позвонить /comment.php
.Так как это ваша тема, вы хотите, чтобы она выглядела так, как вы хотите, но вот пример для начала:
<?php
/*
* File: /wp-content/themes/my-theme/comment.php
*/
global $wp_query,$post;
$comment_id = $wp_query->query['comment_id'];
$comment = get_comment($comment_id);
$permalink = get_permalink($post->ID);
get_header();
?>
<div id="container">
<div id="comment-<?php echo $comment_id; ?>" class="comment">
<p>Comment by: <span class="comment-author">
<a href="<?php echo $comment->comment_author_url; ?>"><?php echo $comment->comment_author; ?></a></span>
on <span class="comment-date"><?php echo date("D M jS Y", strtotime($comment->comment_date)); ?></span>
at <span class="comment-time"><?php echo date("h:ia", strtotime($comment->comment_date)); ?></span>
</p>
<p>About: <a href="<?php echo $permalink; ?>"><?php echo $post->post_title; ?></a></p>
<blockquote><?php echo $comment->comment_content; ?></blockquote>
</div>
</div>
<?php
get_sidebar();
get_footer();
Есть вопросы?Просто спросите.
Надеюсь, это поможет.
PS Весь код, который я описал выше, может быть помещен в файл functions.php
вашей темы и / или в собственный плагин.Предостережение относится к правилам очистки перезаписи URL, которые должны включаться в ловушку активации плагина, если вы собираетесь включить его вместо того, чтобы мы просто сбрасывали их вручную в разделе постоянных ссылок консоли администратора.Я не показал, как зарегистрировать хук активации, но если вы хотите узнать больше, вы можете прочитать об этом здесь .