it-swarm.dev

Verknüpfen mit der Seite, die nur Kommentare ohne übergeordneten Beitrag zeigt

Ich möchte Kommentare zu Beiträgen auf ihrer eigenen Seite ohne den übergeordneten Beitrag anzeigen. Ich weiß, dass ich wp_list_comments () auf der einzelnen Beitragsseite verwenden und eine Rückruffunktion übergeben kann, um mein eigenes Markup für die Kommentaranzeige zu verwenden. Ich habe vor, dies zu tun, damit ich jedem Kommentar einen Link hinzufügen kann, der diesen Kommentar auf seiner eigenen Seite anzeigt.

Wenn dies nicht WordPress wäre, würde ich verwenden:

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

... und nimm die $ comment_id aus der Abfragezeichenfolge.

Wie würde dieser Link in WordPress aussehen? Beispiel: Welche Zeichenfolge würde ich einschließen, um direkt zu my_comments.php zu gelangen, wo ich get_comment ($ comment_id) und comment_template () aufrufe?

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

Sie könnten wahrscheinlich einfach eine neue Seite in WordPress erstellen und dieser Seite eine benutzerdefinierte Vorlage geben. Dann wäre die URL genau das, was sie normalerweise wäre, um zu dieser Seite zu gelangen. Der einzige Unterschied besteht darin, dass die von Ihnen verwendete benutzerdefinierte Vorlage so eingerichtet ist, dass sie die comment_id über den Querystring akzeptiert, dann nur die Details für den jeweiligen Kommentar abruft und im Vorlagencode die Details des Kommentars wiedergibt.

Wenn Sie also eine Seite in WordPress mit dem Namen "Comment Details" haben, die Sie erstellen, können Sie über http://www.domain.com/comment-details auf diese Seite zugreifen (vorausgesetzt, Sie haben Permalinks aktiviert). Ihr Link würde also so aussehen:

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

Die Seite "Kommentardetails" wird so eingerichtet, dass eine benutzerdefinierte Vorlage verwendet wird, die den Code zum Ausspucken der Details enthält.

2
Todd Perkins

Es gibt zahlreiche verschiedene Möglichkeiten, dies zu erreichen, von denen einige ausgefeilter sind als andere und von denen praktisch alle potenziell mit anderen Plugins in Konflikt stehen. Ignorieren Sie jedoch diese eine Möglichkeit, die dem ziemlich nahe kommt, wonach Sie gefragt haben. :)

Diese Lösung unterstützt ein URL-Format wie das folgende, wobei %comment_id% die numerische ID Ihres Kommentars aus der wp_comments-Tabelle ist:

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

Zuerst müssen Sie die URL-Umschreibung mit dem folgenden Code konfigurieren. Hoffentlich ist es einigermaßen selbsterklärend, aber zögern Sie nicht zu fragen:

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

Sie müssen diesen Code entweder in einem Plugin-Aktivierungs-Hook aufrufen, um die Regeln zu löschen, oder wenn es Ihre Site ist, können Sie Permalinks einfach im BereichSettings> Permalinkssettings der Administrationskonsole speichern:

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

Fügen Sie als Nächstes einen parse_query-Filter-Hook hinzu. Dies wird aufgerufen, nachdem WordPress die Abfrage überprüft hat. Es wird geprüft, ob Ihr hinzugefügter comment_id query_var festgelegt ist, und in diesem Fall, ob Sie sich unter der gewünschten URL befinden. Wenn ja, wird das Kommentar-Array mit get_comment() geladen, um den Parameter 'p' (der auf eine Beitrags-ID festgelegt werden sollte) auf den Beitrag zu setzen, der sich auf den Kommentar bezieht. Auf diese Weise lädt WordPress, wenn es die Abfrage ausführt, dass es ausgeführt wird, egal wasmindestensetwas, das Sie in Ihrer comment.php-Designvorlagendatei unten benötigen, und Sie müssen keine weitere ausführen Fragen Sie später ab, wenn Sie es brauchen. Dieser Code weist WordPress auch an, klebrige Beiträge mit der seltsam benannten Option caller_get_posts zu ignorieren:

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

Als nächstes müssen Sie den Code mit dem Filter /wp-includes/template-loader.php in template_include einbinden. Dies wird aufgerufen, nachdem WordPress die Abfrage überprüft und den Beitrag für den Kommentar geladen hat. Hier überprüfen Sie zunächst erneut, ob in der query_var comment_id angegeben ist, und auch, ob die URL die gewünschte ist. In diesem Fall ersetzen wir die /index.php-Vorlagenseite durch /comment.php. Hierbei handelt es sich um eine Designvorlagendatei, die Sie erstellen müssen:

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

Zuletzt müssen Sie Ihre Theme-Template-Datei erstellen, die ich als /comment.php bezeichnet habe. Da es Ihr Thema ist, möchten Sie, dass es so aussieht, wie Sie es möchten, aber hier ist ein Beispiel für den Einstieg:

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

Irgendwelche Fragen? Einfach fragen.

P.S. Der gesamte Code, den ich oben beschreibe, kann entweder in die functions.php-Datei Ihres Themas und/oder in ein eigenes Plugin eingefügt werden. Eine Einschränkung betrifft die URL-Rewrite-Flushing-Regeln, die in einem Plugin-Aktivierungs-Hook enthalten sein sollten, wenn Sie sie einschließen möchten, statt sie einfach manuell in den Permalinks-Abschnitt der Admin-Konsole zu laden. Ich habe nicht gezeigt, wie man einen Aktivierungshaken registriert, aber wenn Sie mehr erfahren möchten, können Sie darüber lesen hier .

15
MikeSchinkel