web-dev-qa-db-de.com

So zeigen Sie Kommentare auf einer anderen Seite an

Ich erstelle eine Bewertungsseite und möchte die Kundenbewertungen (Kommentare) auf einer anderen Seite als in der Datei single-restaurant.php anzeigen. Ich habe nur einen Link mit der Aufschrift (Bewertungen lesen/hinzufügen).

Ich habe ein benutzerdefiniertes Kommentar-Template erstellt und es comments-side.php genannt und dies ist, was ich darin habe:

<?php
/**
 * Comments Template
 *
 */

?>

<div id="comments-template" class="comments-side">

    <div class="comments-wrap">

        <div id="comments">

            <?php if ( have_comments() ) : ?>

                <?php do_atomic( 'before_comment_list' );// supreme_before_comment_list ?>



                <ol class="comment-list">
                <?php $args = array(
    'walker'            => null,
    'max_depth'         => '10',
    'style'             => 'ul',
    'callback'          => 'mytheme_comment',
    'end-callback'      => null,
    'type'              => 'all',
    'reply_text'        => 'Reply',
    'length'            => '10',
    'page'              => '',
    'per_page'          => '3',
    'avatar_size'       => 32,
    'reverse_top_level' => null,
    'reverse_children'  => '',
    'format'            => 'xhtml', //or html5 @since 3.6
    'short_ping'        => false // @since 3.6
); ?>
                    <?php wp_list_comments( $args, $comments); ?>
                </ol><!-- .comment-list -->

                            <?php endif; ?>

        </div><!-- #comments -->

        <?php $comment_args = array( 'fields' => apply_filters( 'comment_form_default_fields', array(
                        'author' => '<div class="form_row clearfix">' .
                                    '<input id="author" name="author" type="text" value="' .
                                    esc_attr( $commenter['comment_author'] ) . '" size="30"' . @$aria_req . ' PLACEHOLDER="'.__('Your name','supreme').'"/>' .
                                    ( $req ? ' <span class="required">*</span>' : '' ) .
                                    '</div><!-- #form-section-author .form-section -->',
                        'email'  => '<div class="form_row clearfix">' .
                                    '<input id="email" name="email" type="text" value="' . esc_attr(  $commenter['comment_author_email'] ) . '" size="30"' . @$aria_req . ' PLACEHOLDER="'.__('Email Address','supreme').'"/>' .
                                    ( $req ? ' <span class="required">*</span>' : '' ) .
                            '</div><!-- #form-section-email .form-section -->',
                        'url'    => '<div class="form_row clearfix">' .
                                    '<input id="url" name="url" type="text" value="' . esc_attr(  $commenter['comment_author_url'] ) . '" size="30"' . @$aria_url . ' PLACEHOLDER="'.__('Website','supreme').'"/>'.'</div>')),
                        'comment_field' => '<div class="form_row clearfix">' .
                                    '<textarea id="comments" name="comment" cols="45" rows="8" aria-required="true" PLACEHOLDER="'.__('Comments','supreme').'"></textarea>' .
                                    ( $req ? ' <span class="required">*</span>' : '' ) .
                                    '</div><!-- #form-section-comment .form-section -->',
                        'comment_notes_after' => '',
                        'title_reply' => __( 'Add a comment', 'supreme' ),
                    );
                    if(get_option('default_comment_status') =='open'){
                        comment_form($comment_args); } // Loads the comment form.  ?>

    </div><!-- .comments-wrap -->

</div><!-- #comments-template -->

Wenn ich jedoch versuche, die Kommentarvorlage aufzurufen ( http://myurl.com/post-slug/comments-side/ ), wird auf der Seite ein 404-Fehler ausgegeben. Ich habe Permalinks auf die Standardeinstellung zurückgesetzt und auf /% postname%/zurückgesetzt, aber ich bekomme immer noch den 404.

Wie bringe ich das zum Laufen?

Ich weiß nicht, ob es relevant ist, aber das habe ich in meiner functions.php für die Kommentare:

function mytheme_comment($comment, $args, $depth) {
        $GLOBALS['comment'] = $comment;
        extract($args, EXTR_SKIP);

        if ( 'div' == $args['style'] ) {
            $tag = 'div';
            $add_below = 'comment';
        } else {
            $tag = 'li';
            $add_below = 'div-comment';
        }
?>
        <<?php echo $tag ?> <?php comment_class(empty( $args['has_children'] ) ? '' : 'parent') ?> id="comment-<?php comment_ID() ?>">
        <?php if ( 'div' != $args['style'] ) : ?>
        <div id="div-comment-<?php comment_ID() ?>" class="comment-body">
        <?php endif; ?>
        <div class="comment-author vcard">
        <?php if ($args['avatar_size'] != 0) echo get_avatar( $comment, $args['avatar_size'] ); ?>
        <?php printf(__('<cite class="fn">%s</cite> <span class="says">says:</span>'), get_comment_author_link()) ?>
        </div>
<?php if ($comment->comment_approved == '0') : ?>
        <em class="comment-awaiting-moderation"><?php _e('Your comment is awaiting moderation.') ?></em>
        <br />
<?php endif; ?>

        <div class="comment-meta commentmetadata"><a href="<?php echo htmlspecialchars( get_comment_link( $comment->comment_ID ) ) ?>">
            <?php
                /* translators: 1: date, 2: time */
                printf( __('%1$s at %2$s'), get_comment_date(),  get_comment_time()) ?></a><?php edit_comment_link(__('(Edit)'),'  ','' );
            ?>
        </div>

        <?php comment_text($comment_ID); ?> 

        <a href="comments-side/#comment-<?php comment_ID() ?>" class="comment-more">read more</a>

        <div class="reply">
        <?php comment_reply_link(array_merge( $args, array('add_below' => $add_below, 'depth' => $depth, 'max_depth' => $args['max_depth']))) ?>
        </div>
        <?php if ( 'div' != $args['style'] ) : ?>
        </div>
        <?php endif; ?>
<?php
        }

Dies ist, was ich in single-restaurant.php habe, um die letzten Kommentare für jeden einzelnen Beitrag vom Beitragstyp "restaurants" anzuzeigen

<div class="sidereviews clearfix"> 
<h3>Recent Reviews</h3>  
<?php comments_template( '/comments-side.php', true ); // Loads the comments-side.php template. ?>
</div><!--/sidereviews-->

Sie müssen eine Seite aus wp-admin->Pages erstellen und Ihre Vorlage als "Vorlage" zuweisen. Bis Sie das tun, wird WordPress nicht wissen, wo die "Seite" zu finden ist - nicht wissen, was mit der Anfrage zu tun ist - und Sie werden eine 404 erhalten. Ich denke, das ist es wirklich.

Überlegen Sie, wo sich Ihre Datei tatsächlich auf dem Server befindet - http://sitename.com/wp-contents/themes/themename/comments-side.php--, aber Sie versuchen, unter http://myurl.com/post-slug/comments-side/ darauf zuzugreifen, genau dort, wo es nicht ist. WordPress und der Server verschwören sich über Dateispeicherorte. Damit dies funktioniert, muss WordPress über die Seite informiert werden. Die Rewrite-Mechanismen funktionieren sonst nicht.

Das Nötigste, um Ihre Kommentare zum Laufen zu bringen, ist die Übergabe der Beitrags-ID über einen get-Parameter wie diesen-- http://sitename.com/wp-contents/themes/themename/comments-side.php?sac=123-- und das Abrufen von Kommentaren wie diesen:

if (isset($_GET['sac'])) {
  $comments = get_comments(array('post_id'=>$_GET['sac']));
  wp_list_comments('',$comments);
}

Ich kann keine Funktion wie have_comments zum Laufen bringen, obwohl ich es vorher noch nicht versucht habe. Möglicherweise gibt es einen Weg, dies zu tun. Entfernen Sie also bis auf weiteres die have_comments Prüfung. Das wird scheitern.

In diesem Code gibt es keine Datenüberprüfung. Ich teste nur Dinge. Schieben Sie die Zeichenfolge GET nicht ohne Validierung durch.

1
s_ha_dum