web-dev-qa-db-fra.com

Comment afficher des commentaires sur différentes pages

Je crée un site d'avis et je souhaite afficher les commentaires des clients (commentaires) sur une page distincte de single-restaurant.php. Je vais juste avoir un lien qui dit (Lire les commentaires/ajouter le vôtre).

J'ai créé un modèle de commentaires personnalisé et l'ai appelé comments-side.php. Voici ce que j'ai dans celui-ci:

<?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 -->

Cependant, lorsque j'essaie d'accéder au modèle de commentaires ( http://myurl.com/post-slug/comments-side/ ), la page génère une erreur 404. J'ai changé les permaliens sur le paramètre par défaut et je suis revenu à /% postname%/mais je reçois toujours le 404.

Comment puis-je obtenir que cela fonctionne correctement?

Je ne sais pas si c'est pertinent, mais voici ce que j'ai dans mon functions.php pour les commentaires:

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
        }

C’est ce que j’ai dans single-restaurant.php pour afficher les commentaires récents, pour chaque message du type "restaurants".

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

Vous devez créer une page à partir de wp-admin->Pages et attribuer votre modèle en tant que "Modèle". En attendant, WordPress ne saura pas où trouver la "page", ne saura pas quoi faire avec la demande, et vous obtiendrez un 404. Je pense que c'est à peu près tout.

Pensez à l'emplacement de votre fichier sur le serveur - http://sitename.com/wp-contents/themes/themename/comments-side.php--, mais vous essayez d'y accéder à http://myurl.com/post-slug/comments-side/, exactement là où il ne l'est pas. WordPress et le serveur conspirent pour mentir au sujet des emplacements de fichiers, donc pour que cela fonctionne, WordPress doit être informé de la page. Les mécanismes de réécriture ne fonctionneront pas autrement.

Le minimum nécessaire pour que vos commentaires fonctionnent est de transmettre l'ID de publication via un paramètre get tel que ceci - http://sitename.com/wp-contents/themes/themename/comments-side.php?sac=123-- - et d'extraire des commentaires comme celui-ci:

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

Je ne parviens pas à utiliser une fonction telle que have_comments, bien que je n’aie jamais essayé auparavant. Il y a peut-être un moyen de le faire. Donc, jusqu'à nouvel ordre, supprimez la vérification have_comments. Cela va échouer.

Il n'y a pas de validation de données dans ce code. Je teste juste des choses. Ne poussez pas la chaîne GET sans validation.

1
s_ha_dum