wordpress permalinks – Cómo mostrar comentarios en una página diferente

Pregunta:

Estoy creando un sitio de reseñas y quiero mostrar las reseñas de los clientes (comentarios) en una página separada del single-restaurant.php. Solo tendré un enlace que dice (Leer reseñas / agregar las tuyas).

Creé una plantilla de comentarios personalizada y la llamé comments-side.php y esto es lo que tengo en ella:

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

Sin embargo, cuando intento ir a la plantilla de comentarios ( http://myurl.com/post-slug/comments-side/ ), la página arroja un error 404. Cambié los enlaces permanentes a la configuración predeterminada y volví a cambiar a /% postname% / pero todavía obtengo el 404.

¿Cómo hago para que esto funcione correctamente?

No sé si es relevante, pero esto es lo que tengo en mi functions.php para los comentarios:

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
        }

Esto es lo que tengo en single-restaurant.php para mostrar los comentarios recientes para cada publicación del tipo de publicación "restaurantes"

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

Respuesta:

Necesita crear una página desde wp-admin->Pages y asignar su plantilla como la "Plantilla". Hasta que no lo hagas, WordPress no sabrá dónde encontrar la "página", no sabrá qué hacer con la solicitud, y obtendrás un 404. Creo que eso es todo, de verdad.

Piense en dónde se encuentra realmente su archivo en el servidor ( http://sitename.com/wp-contents/themes/themename/comments-side.php , pero está intentando acceder a él en http://myurl.com/post-slug/comments-side/ , exactamente donde no está. WordPress y el servidor conspiran para mentir sobre la ubicación de los archivos, por lo que, para que esto funcione, es necesario informar a WordPress sobre la página. Los mecanismos de reescritura no funcionarán de otra manera.

Lo mínimo para que sus comentarios funcionen es pasar la ID de la publicación a través de un parámetro de obtención como este: http://sitename.com/wp-contents/themes/themename/comments-side.php?sac=123 – y buscar comentarios como este:

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

No puedo hacer que la función como have_comments funcione, aunque no lo he intentado antes. Puede haber una forma de hacerlo. Por lo tanto, hasta nuevo aviso, elimine la have_comments . Eso fallará.

No hay validación de datos en ese código. Solo estoy probando cosas. No presione la cadena GET sin validación.

Leave a Comment

Your email address will not be published. Required fields are marked *

web tasarım