it-swarm-pt.tech

Vinculando à página mostrando apenas comentários sem postagem dos pais

Gostaria de mostrar comentários em sua própria página sem a postagem dos pais. Eu sei que posso usar wp_list_comments () na página de postagem única e passar uma função de retorno de chamada para usar minha própria marcação de exibição de comentário. Eu planejo fazer isso para que eu possa incluir um link com cada comentário que mostrará esse comentário em sua própria página.

Se não fosse o WordPress, usaria:

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

... e pegue o $ comment_id da string de consulta.

Como seria esse link no WordPress? ie: qual string eu incluiria para ir diretamente, digamos, para my_comments.php onde eu chamo get_comment ($ comment_id) e comment_template ()?

<a href = "<?php bloginfo('url');?>/what/goes/here?comment_id = $comment_id"<View single comment</a>
5
kevtrout

Você provavelmente poderia simplesmente criar uma nova página no WordPress e dar a essa página um modelo personalizado. Em seguida, a URL seria apenas o que normalmente seria para chegar a essa página. A única diferença é que o modelo personalizado que você está usando seria configurado para aceitar o comment_id por meio da string de consulta e, em seguida, apenas obterá os detalhes do comentário específico e, no código do modelo, ecoará os detalhes do comentário.

Então, se você tem uma página no wordpress chamada "Comment Details" que você criou, você pode acessar essa página via http://www.domain.com/comment-details (supondo que você tenha permalinks habilitado). Então seu link ficaria assim:

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

A página "Detalhes do comentário" seria configurada para usar um modelo personalizado que conteria o código para exibir os detalhes.

2
Todd Perkins

Existem inúmeras maneiras diferentes de conseguir isso, algumas mais polidas do que outras e praticamente todas elas com potencial de conflito com outros plugins, mas ignorando tudo isso, aqui está uma maneira que está bem próxima do que você pediu. :)

Esta solução suportará um formato de URL como o seguinte, onde %comment_id% é o ID numérico do seu comentário da tabela wp_comments:

http://example.com/comments/%comment_id%/

Primeiro, você precisará configurar sua regravação de URL usando o código a seguir. Espero que seja razoavelmente auto-explicativo, mas não hesite em perguntar:

$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.

Você também precisará chamar esse código em um hook de ativação de plug-in para liberar as regras ou, se for o seu site, é possível salvar apenas permalinks nas configurações Settings> Permalinks do Admin Console área:

global $wp_rewrite;
$wp_rewrite->flush_rules(false);

Em seguida, adicione um gancho de filtro parse_query. Isso será chamado após o WordPress ter inspecionado a consulta. Ele testa para ver se o seu conjunto comment_id query_var adicionado e, se assim for, ele testa para ver se você está no URL desejado. Se sim, carrega a matriz de comentários usando get_comment() para definir o parâmetro 'p' (que deve ser definido como um ID de postagem) para a postagem relacionada ao comentário. Dessa forma, quando o WordPress executa a consulta que vai executar, não importa o que , pelo menos ele carrega algo que você precisa no seu arquivo de modelo de tema comment.php abaixo e você não terá para executar outra consulta mais tarde, quando você precisar. Esse código também diz ao WordPress para ignorar postagens fixas usando a opção caller_get_posts de nome estranho:

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.
    }
}

Ainda a seguir, você precisará inserir o código em /wp-includes/template-loader.php usando o filtro template_include. Isso será chamado depois que o WordPress inspecionou a consulta e carregou a postagem para o comentário. Aqui você primeiro checa novamente para comment_id no query_var e também para o URL sendo o que você quer. Em caso afirmativo, substituiremos a página de modelo /index.php por /comment.php, que é um arquivo de modelo de tema que você precisará criar:

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;
}

Por fim, agora você precisa criar seu arquivo de modelo de tema que eu escolhi para chamar /comment.php. Uma vez que é o seu tema, você vai querer fazer parecer que você quer, mas aqui está um exemplo para você começar:

<?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();

Alguma pergunta? É só perguntar.

P.S. Todo o código que eu descrevi acima pode ir no arquivo functions.php do seu tema e/ou em um plugin próprio. Uma ressalva é que as regras de liberação de regravação de URL devem entrar em um gancho de ativação do plug-in se você for incluí-las em vez de apenas liberá-las manualmente na seção permalinks do console de administração. Eu não mostrei como registrar um hook de ativação, mas se você quiser saber mais, você pode ler sobre isso aqui .

15
MikeSchinkel