kevtrout
  • 0
Эксперт

Ссылка на страницу, показывающую только комментарии без родительского поста

  • 0

Я хотел бы показывать комментарии к сообщениям на их собственной странице без родительского сообщения. Я знаю, что могу использовать wp_list_comments() на странице с одним сообщением и передать функцию обратного вызова, чтобы использовать мою собственную разметку для отображения комментариев. Я планирую сделать это, чтобы к каждому комментарию можно было добавить ссылку, по которой этот комментарий будет отображаться на отдельной странице.

Если бы это был не WordPress, я бы использовал:

<a href = " www.example.com/individual_comment.php?comment_id = $comment_id">View single comment</a>

… и возьмите $comment_id из строки запроса.

Как эта ссылка будет выглядеть в WordPress? то есть: какую строку я должен включить, чтобы перейти непосредственно, скажем, к my_comments.php, где я вызываю get_comment($comment_id) и comment_template()?

<a href = "<?php bloginfo('url');?>/what/goes/here?comment_id = $comment_id"<View single comment</a>
Share
  1. Опубликовал мой менее технический ответ здесь: wordpress.stackexchange.com/a/57161/10691

    • 0
  2. Вероятно, вы могли бы просто создать новую страницу в WordPress и присвоить этой странице собственный шаблон. Тогда URL-адрес будет таким, каким он обычно должен быть для перехода на эту страницу. Единственное отличие состоит в том, что используемый вами настраиваемый шаблон будет настроен на прием comment_id через строку запроса, а затем просто получите детали для конкретного комментария, а в коде шаблона выведите детали комментария.

    Итак, если у вас есть страница в wordpress под названием «Сведения о комментариях», которую вы создаете, вы можете получить доступ к этой странице через http://www.domain.com/comment-details (при условии, что у вас включены постоянные ссылки). Таким образом, ваша ссылка будет выглядеть так:

    <a href = "<?php bloginfo('url');?>/comment-details?comment_id=$comment_id">View single comment</a>
    

    Страница «Подробности комментариев» будет настроена на использование пользовательского шаблона, который будет содержать код для отображения деталей.

    • 0
  3. Существует множество различных способов сделать это, некоторые из них более совершенны, чем другие, и практически все они могут конфликтовать с другими плагинами, но если игнорировать все это, то вот один из способов, который довольно близок к тому, о чем вы просили. 🙂

    Это решение будет поддерживать формат 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-адресов, которые должны быть включены в хук активации плагина, если вы собираетесь включить его, вместо этого мы просто очищаем их вручную в разделе постоянных ссылок консоли администратора. Я не показывал, как зарегистрировать хук активации do, но если вы хотите узнать больше, вы можете прочитать об этом здесь.

    • 0

Оставить ответ

You must login to add an answer.