it-swarm-eu.dev

Odkazování na stránku zobrazuje pouze komentáře bez rodičovského příspěvku

Chci ukázat komentáře na vlastní stránce bez rodičovského příspěvku. Vím, že mohu použít wp_list_comments () na stránce s jedním příspěvkem a předat funkci zpětného volání, abych použil svůj vlastní značkový komentář. Mám v plánu to udělat, abych mohl zahrnout odkaz s každým komentářem, který bude zobrazovat tento komentář na vlastní stránce.

Pokud to nebylo WordPress bych použít:

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

... a uchopte $ comment_id z řetězce dotazu.

Co by ten odkaz vypadal ve WordPressu? tj. jaký řetězec bych zahrnoval, abych se dostal přímo, řekněme my_comments.php, kde volám get_comment ($ comment_id) a comment_template ()?

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

Pravděpodobně stačí vytvořit novou stránku ve WordPressu a dát této stránce vlastní šablonu. Pak by byla url jen to, co by normálně bylo dostat na tuto stránku. Jediný rozdíl je v tom, že uživatelská šablona, ​​kterou používáte, bude nastavena tak, aby přijímala komentář_příkaz prostřednictvím dotazovacího řetězce, a pak jen získejte podrobnosti pro konkrétní komentář a v kódu šablony se ozvěte podrobnosti komentáře.

Takže pokud máte stránku v wordpressu nazvanou "Detaily komentáře", kterou vytvoříte, můžete na tuto stránku přistupovat přes http://www.domain.com/comment-details (za předpokladu, že máte povolené permalinks). Váš odkaz by tedy vypadal takto:

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

Stránka "Detaily podrobností" bude nastavena tak, aby používala vlastní šablonu, která by obsahovala kód pro vyplnění podrobností.

2
Todd Perkins

Existuje mnoho různých způsobů, jak toho dosáhnout, některé více leštěné než jiné a prakticky všechny z nich mají potenciál pro konflikt s jinými zásuvnými moduly, ale ignorují vše, co je zde jeden způsob, který je velmi blízký tomu, co jste požadovali. :)

Toto řešení bude podporovat formát URL, jako je následující, kde %comment_id% je číselné ID vašeho komentáře z tabulky wp_comments:

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

Nejprve je třeba nakonfigurovat přepisování URL pomocí následujícího kódu. Doufejme, že je rozumně samo-vysvětlující, ale neváhejte se zeptat

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

Budete také muset tento kód zavolat v háku pro aktivaci pluginů, abyste pravidla vyprázdnili, nebo pokud je to vaše stránka, stačí uložit permalinks do administrátorské konzoly Nastavení> Permalinks nastavení plocha:

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

Dále přidejte parse_query háček filtru. To bude volána poté, co WordPress zkontroloval dotaz. Testuje, zda vaše přidaná comment_id sada dotazů nastavila a zda to testuje, zda jste na požadované adrese URL. Pokud ano, načte pole komentářů pomocí get_comment() za účelem nastavení parametru 'p' (který by měl být nastaven na ID příspěvku) na příspěvek, který souvisí s komentářem. Tímto způsobem, když WordPress spustí dotaz, který se bude spouštět bez ohledu na to, co alespoň načte něco, co budete potřebovat, do svého souboru šablony motivů comment.php níže a nebudete mít spustit další dotaz později, když ho potřebujete. Tento kód také říká WordPress ignorovat lepkavé příspěvky pomocí zvláštně pojmenované caller_get_posts možnost:

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

Dále budete muset zavést kód do /wp-includes/template-loader.php pomocí filtru template_include. To bude volána po WordPress má jak zkontrolovat dotaz a načíst příspěvek pro komentář. Zde nejprve zkontrolujete znovu comment_id v dotazu_var a také URL, které chcete. Pokud tak nahradíme stránku šablony /index.php/comment.php, což je soubor šablony motivu, který budete muset vytvořit:

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

Nakonec musíte vytvořit soubor šablony motivu, který jsem zvolil pro volání /comment.php. Protože je to váš motiv, budete chtít, aby vypadal, že chcete, ale zde je příklad, jak začít:

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

Nějaké otázky? Jen se ptám.

P.S. Všechny výše uvedené kódy, které jsem popsal, mohou jít buď do souboru functions.php vašeho motivu a/nebo do vlastního pluginu. Výstraha je v tom, že pravidla pro přepisování adres URL, která by měla jít do háku pro aktivaci pluginu, pokud jej chcete zahrnout, místo toho, abychom je jednoduše vyprázdnili ručně v sekci Permalinks konzoly pro správu. Nevykazoval jsem, jak zaregistrovat aktivační hák, ale pokud se chcete dozvědět více, můžete si o tom přečíst zde .

15
MikeSchinkel