为什么COMMENT_REPLY_LINK在评论区的错误位置启动回复表单?

时间:2018-01-01 作者:Jonathan Guerin

我有这个习惯extended Walker_Comments 类别:

class Custom_Comment_Walker extends Walker_Comment {
    var $tree_type = \'comment\';
    var $db_fields = array( \'parent\' => \'comment_parent\', \'id\' => \'comment_ID\' );

    function __construct() { ?>
        <ul class="comments-list col-md-12">

    <?php }

    function start_lvl( &$output, $depth = 0, $args = array() ) {
        $GLOBALS[\'comment_depth\'] = $depth + 1;
        ?>

        <ul class="child-comments comments-list col-md-12">

    <?php }

    function end_lvl( &$output, $depth = 0, $args = array() ) {
        $GLOBALS[\'comment_depth\'] = $depth + 1; ?>

        </ul>

    <?php }

    function start_el( &$output, $comment, $depth = 0, $args = array(), $id = 0 ) {
        $depth++;
        $GLOBALS[\'comment_depth\'] = $depth;
        $GLOBALS[\'comment\'] = $comment;

        $tag = \'li\';
        $add_below = \'comment\';
        ?>

        <li <?php comment_class( $depth == \'1\' ? \'parent col-md-12\' : \'child col-md-11\') ?> id="comment-<?php comment_ID() ?>" itemprop="comment" itemscope itemtype="http://schema.org/Comment">
            <div class="comment-wrapper col-md-12">
                <?php echo get_avatar( $comment, 65, \'[default gravatar URL]\', \'Author’s gravatar\' ); ?>
                <div class="info">
                    <div class="comment-meta" role="complementary">
                        <h2 class="comment-author">
                            <a class="comment-author-link" href="<?php comment_author_url(); ?>" itemprop="author"><?php comment_author(); ?></a>
                        </h2>
                        <time class="comment-time" datetime="<?php comment_date(\'Y-m-d\') ?>T<?php comment_time(\'H:iP\') ?>" itemprop="datePublished"><?php comment_date(\'jS F Y\') ?>, <a href="#comment-<?php comment_ID() ?>" itemprop="url"><?php comment_time() ?></a></time>
                        <?php edit_comment_link(\'<p class="comment-meta-item">Edit this comment</p>\',\'\',\'\'); ?>
                        <?php if ($comment->comment_approved == \'0\') : ?>
                        <p class="comment-time">Your comment is awaiting moderation.</p>
                        <?php endif; ?>
                    </div>
                    <div class="comment-content" itemprop="text">
                        <?php comment_text() ?>
                        <?php comment_reply_link( array_merge( $args, array( \'add_below\' => $add_below, \'depth\' => $depth, \'max_depth\' => $args[\'max_depth\'] ) ) ) ?>
                    </div>
                </div>
            </div>

    <?php }

    function end_el(&$output, $comment, $depth = 0, $args = array() ) { ?>

        </li>

    <?php }

    function __destruct() { ?>

        </ul>

    <?php }
}
渲染后的布局如下:

enter image description here

当我点击回复按钮时,我希望我的表单位于启动它的注释下方,相反,表单位于树的起始位置下方,如下图所示(gif图像):

https://i.imgur.com/QQij8a4.gifv

我认为这与没有将正确的参数传递给

comment_reply_link( array_merge( $args, array( \'add_below\' => $add_below, \'depth\' => $depth, \'max_depth\' => $args[\'max_depth\'] ) ) )
我将如何实现这一目标?

1 个回复
SO网友:Tom J Nowell

因为这是在javascript中完成的,您必须将javascript排队才能工作,如文档中所述:

如果启用了JavaScript并回复了注释。加载js JavaScript时,链接会将注释表单移动到注释的正下方。

https://codex.wordpress.org/Function_Reference/comment_reply_link

e、 g。

function wpse289875_enqueue_comments_reply() {
    if ( is_singular() && get_option( \'thread_comments\' ) ) {
        wp_enqueue_script( \'comment-reply\' );
    }
}
add_action( \'comment_form_before\', \'wpse289875_enqueue_comments_reply\' );
还要注意https://codex.wordpress.org/Migrating_Plugins_and_Themes_to_2.7/Enhanced_Comment_Display#Javascript_Comment_Functionality

Edit 我怀疑根本的问题是代码没有使用相同的格式,因此不存在所需的ID。

例如,注释回复使用ID来确定要将回复表单放在哪个注释下,但您的HTML没有ID,请参见中的这一行wp-includes/class-walker-comment.php:

<div id="div-comment-<?php comment_ID(); ?>" class="comment-body">
代码中不存在等效项。从外观上看,至少需要有这些ID:

expndtw-1\\f25 comment-x(注释-x),div-comment-x(注释-x),后者嵌套在前者中,以及x 是该评论的ID。

请注意,在任何时候,您都可以切换到测试环境(如本地dev env)中的一个默认主题,以获得默认的工作HTML,或者通过查看core中的comment walker类wp-includes/class-walker-comment.php

作为参考,您还可以重写此处定义的moveform函数:

https://github.com/WordPress/WordPress/blob/master/wp-includes/js/comment-reply.js#L213

它已添加到主window 对象,因此您可以使用自己的副本替换它,并使用额外的调试输出或不同的机制

结束

相关推荐

Conditional tag for comments

如何检查当前循环是否为注释?类似于is_comment().我正在建立一个自定义update_x_meta() 根据类型更新元数据的函数,例如:if ( is_single() || is_attachment() || is_page() ) { // post, page, attachment update_post_meta($id, $meta_data, $meta_value); } elseif (is_author()) { //