web-dev-qa-db-fra.com

Puis-je avoir deux fichiers single.php et avoir un seul affichage pour le post et l'autre pour afficher les commentaires de cet article en particulier?

Évidemment, je sais que je ne peux pas avoir deux fichiers single.php. Celui avec les commentaires devrait avoir un nom différent ... peut-être single-comments.php ou quelque chose comme ça.

Je travaille sur un site de critiques de restaurants et faute de place sur la page, j'ai décidé de montrer quelques extraits des derniers commentaires (avis clients) sur le côté de la page, puis de créer un lien vers tous les autres commentaires ( avis des clients) et le formulaire de commentaire sur une autre page. J'ai pensé aux lightboxes mais je ne pense pas que ce soit idéal pour ce que je veux réaliser.

Des suggestions sur la façon de faire cela? Merci.

EDIT: J'ai créé un modèle de page pour les commentaires et l'ai nommé comments-side.php. Voici le code:

<?php
/*
 * Template Name: Comments Page
 */
 global $data; //get theme options

?>

<div id="comments-template">

    <div class="comments-wrap">

        <div id="comments">

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

                <h3 id="comments-number" class="comments-header"><?php comments_number( __( 'No Comments', 'supreme' ), __( 'One Comment', 'supreme' ), __( '% Comments', 'supreme' ) ); ?></h3>

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

                <?php if ( get_option( 'page_comments' ) ) : ?>
                    <div class="comment-navigation comment-pagination">
                        <span class="page-numbers"><?php printf( __( 'Page %1$s of %2$s', 'supreme' ), ( get_query_var( 'cpage' ) ? absint( get_query_var( 'cpage' ) ) : 1 ), get_comment_pages_count() ); ?></span>
                        <?php paginate_comments_links(); ?>
                    </div><!-- .comment-navigation -->
                <?php endif; ?>

                <ol class="comment-list">
                    <?php wp_list_comments( hybrid_list_comments_args() ); ?>
                </ol><!-- .comment-list -->

                <?php do_atomic( 'after_comment_list' ); // supreme_after_comment_list ?>

            <?php endif; ?>

            <?php if ( pings_open() && !comments_open() ) : ?>

                <p class="comments-closed pings-open">
                    <?php printf( __( 'Comments are closed, but <a href="%1$s" title="Trackback URL for this post">trackbacks</a> and pingbacks are open.', 'supreme' ), get_trackback_url() ); ?>
                </p><!-- .comments-closed .pings-open -->

            <?php elseif ( !comments_open() ) : ?>

                <p class="comments-closed">
                    <?php _e( 'Comments are closed.', 'supreme' ); ?>
                </p><!-- .comments-closed -->

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

J'ai créé une page dans l'administrateur de Wordpress et sélectionné le modèle de page de commentaires pour cette page. Voici ce que j'ai dans functions.php pour gérer 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
        }

Et voici comment j'appelle les commentaires du côté de single-restaurant.php

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

Il existe un autre fichier de commentaires (comments.php) qui gère les commentaires sur le blog. Que devrais-je changer ou me débarrasser? Qu'est-ce que je fais mal? Merci.

2

Créez un modèle de page pour afficher les commentaires de la "révision", à savoir post.

Ensuite, vous pouvez créer un lien vers cette page et inclure l'ID de l'article dans l'URL et $ _GET l'ide de l'article dans l'URL de la nouvelle page, puis interrogez l'article et affichez ses commentaires.

Cela devrait au moins vous orienter dans la bonne direction. Le modèle final de Kwame s'est terminé par:

<?php
    /*
    Template Name: Handle Review Comments
    */
    get_header(); ?>

    <?php

    echo '<div id="content" class="barsclubs-single">';
    if(isset($_GET['location'])){
          $location = $_GET['location'];
          $postIdVariable = $location;
          $post = get_post( $postIdVariable );    
    echo 'You are viewing reviews for '.'<a href="'.get_post_permalink().'">'.$post->post_title.'</a>';
          $location = $_GET['location'];
          $defaults = array(
             'post_id' => $location,
             'number' => 10,
              );
    $comments = get_comments($defaults);
    wp_list_comments( $args, $comments );
    comment_form( $args, $location );
    }

    echo '</div>';
    include_once( 'footer.php' );
    ?>

Créez une page avec le modèle. Et envoyer des variables comme ça.

www.yoursite.com/yourpagename/?test=postid

$url='www.yoursite.com/yourpagename/?test='.$post->ID;
echo '<a href="'.$url.' title="View Review Comments" target="_BLANK"';

Enverrait l'id de la publication actuelle à votre script. Doit être utilisé dans la boucle, je crois.

Modifier:

Vous pouvez le voir en action ici:

Le script extrait les commentaires du message avec l'identifiant 963, qui est l'identifiant que je lui ai envoyé dans l'URL.

http://oq.publicvent.org/handle-review-comments/?test=963

Edit 2: Essayer de vous simplifier la vie.

Créez un fichier et nommez-le comme vous le souhaitez. Mettez ce code dedans:

    <?php
    /*
    Template Name: Handle Review Comments
    */
    include_once( 'header.php' );
    if(isset($_GET['test'])){
    echo 'you passed this script the post id: '.$_GET['test'];
    $test = $_GET['test'];
    $defaults = array(
        'post_id' => $test,
        'number' => 10,
             );
    $comments = get_comments($defaults);
    wp_list_comments( $args, $comments ); 
    comment_form( $args, $test );
    }
    include_once( 'footer.php' );
    ?>

Enregistrez et téléchargez votre serveur. Créez une nouvelle page et nommez-la toutes critiques, utilisez le modèle (Gestion des commentaires de révision) pour le modèle de page, puis sélectionnez-la dans la liste déroulante de droite.

Maintenant sur votre post.php ou single.php ou quelle que soit la façon dont vous affichez votre commentaire, vous pouvez l’utiliser pour afficher les 5 commentaires les plus récents concernant cet avis. Inlcuding un lien au bas des autres critiques.

<div class="sidereviews clearfix"> 
<h3>Recent Reviews</h3>  
<?php 
    $defaults = array(
        'post_id' => $post->ID,
        'number' => 5, //get 5 most recent comments
             );
    $comments = get_comments($defaults);
    wp_list_comments( $args, $comments );
?>
<?php echo '<h3><a href="'.site_url().'/all-reviews/?test='.$post->ID.'">All Reviews</a></h3>'; ?>
</div><!--sidereviews-->

EDIT 3: POST TITLE

Le code de Kwame:

 $post = get_post( $postIdVariable );    
 echo 'You are viewing reviews for '.$post->post_title;
 $location = $_GET['location'];

$ postIdVariable est essentiellement une variable vide car $ _GET ['location']; n'a pas encore couru.

Modifiez cet extrait ci-dessus en ceci:

$location = $_GET['location'];
$postIdVariable = $location;    
$post = get_post( $postIdVariable );    
echo 'You are viewing reviews for '.'<a href="'.get_post_permalink().'">'.$post->post_title.'</a>';
2
Vigs

Je suis parti avec ma famille pour le week-end. Voici un lien vers l’une des pages utilisant les commentaires: http://ghananights.villagepixels.com/bars-clubs/the-republic-bar-and-grill/ (Encore besoin d'un style hehehe) ... Le permalien est mal placé. Le lien est défini entre les dates et ne mène en réalité nulle part, contrairement à l'option "Afficher toutes les critiques en bas ... Comment puis-je afficher un extrait du commentaire au lieu du commentaire complet, puis ajouter un lien en savoir plus menant à cette De plus, j'ai essayé d'utiliser -> post_title et le titre de cette page a été renvoyé (Avis de localisation) à la place de l'article (The Republic Bar and Grill) ... Merci - Kwame Boame

Tentative d'utiliser un rappel de commentaire personnalisé pour résoudre le problème ci-dessus:

Remplacer:

wp_list_comments( $args, $comments );

Avec:

$defaults = array(
    'post_id' => $post->ID,
    'number' => 5, //get 5 most recent comments
);

$comments = get_comments($defaults);

$commentsArgs = array(
    'callback'   => 'kwame_comments',
    'reply_text' => null,
);

wp_list_comments( $commentsArgs, $comments );

Placez ceci au bas de votre functions.php:

function kwame_comments($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 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( site_url().'/location-review/?location='.$comment->comment_post_ID.'#comment-'.$comment->comment_ID ); ?>" title="View Review">
        <?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_contents = get_comment_text();

    //if comment contents is longer than 50 characters
    if(strlen($comment_contents > 50)){
        echo substr($comment_contents, 0, 50);

        //echo only first 50 characters
        echo $comment_contents;
    } else {
        echo $comment_contents;
    }
?>

    <div class="reply">
        <a href="<?php echo htmlspecialchars( site_url().'/location-review/?location='.$comment->comment_post_ID.'&replytocom='.$comment->comment_ID.'#respond' ); ?>" title="View Review">Reply</a>
    </div>

    <?php if ( 'div' != $args['style'] ) : ?>
        </div>
    <?php endif; ?>

<?php
}

Cela fonctionne pour moi sur un localhost.

1
Vigs