【转载】WordPress 嵌套回复构成原理

[url]http://www.neoease.com/wordpress-walker-comments/[/url]

在上一篇文章 (WordPress 嵌套回复) 中, 我已经介绍了嵌套回复的利弊, 制作方法等等. 本文将简单说明嵌套回复构成的原理.

本文中提及的 4 个方法均来自 Walker_Comment 类, 该类继承自 Walker, 是构建嵌套回复的核心部分. 另外, WordPress 中的子页面和子分类也是使用 Walker 的子类来实现的. 如果你想对 WordPress 的嵌套同能了解更多, 可以查阅 WordPress Codex 中关于 Walker 类的说明.

打开 wp-includes/comment-template.php, 查找 Walker_Comment 类. 以下展开介绍这 4 个方法.


start_lvl

子菜单列表的开始标签, 默认是
    , 在第一个子条目之前生成.

    end_lvl

    对应 start_lvl 的子菜单列表的结束标签, 默认是
, 在最后一个子条目之后生成.

start_el

条目的前半部分, 包括开始符号和评论内容. 开始符号是
或者
  • (外层是 ol 或 ul 的情况下是
  • ); 评论内容就是评论的相关信息显示, WordPress 向我们提供了可即用的布局, 但也可以通过 callback 方法改变评论内容的结构. 调用回调函数的部分代码示意如下:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    function start_el(&$output, $comment, $depth, $args) {
    $depth++;
    $GLOBALS['comment_depth'] = $depth;

    // 如果定义了回调函数, 则调用其回调函数, 并终止后面的处理.
    if ( !empty($args['callback']) ) {
    call_user_func($args['callback'], $comment, $args, $depth);
    return;
    }

    // 如果没有定义回调函数, 则执行本方法中后面的处理, 生成默认的评论布局.
    ...
    }
    我们所谓的自定义嵌套回复, 就是创建一个 callback 方法, 并在 wp_list_comments 方法中调用这个它生成自定义的评论结构. 也可以认为是定义一个新的方法, 取代 start_el 方法内部的默认布局.

    end_el

    条目的后半部分, 其实就一个结束符号. 这里也提供一个名为 end-callback 的回调方法, 原理和 start_el 一样, 是一个自定义的处理方式. 但是 end-callback 并不常用, 因为 end_el 只生成一个简单的结束符号, 实在没必要为此再定义一个方法.

    我觉得只有在需要复杂的评论结构时, 才有必要用到 end-callback. 如: 要在评论的上方和下方都添加背景图效果, 评论框内可能需要多一个 DIV 层, 则可能用上 end-callback. 在 callback 方法中以
    作为开始, 而 end-callback 中以
    结束掉.

    例子

    下面我将以一个嵌套回复的例子来证明上述内容.

    现有评论嵌套结构如下:

    comment (1)

    comment (1.1)

    comment (1.2)

    comment (1.2.1)

    comment (2)

    依照上述方法, 执行顺序如下:

    start_el (1)
    start_lvl (1)
    start_el (1.1)
    end_el (1.1)
    start_el (1.2)
    start_lvl (1.2)
    start_el (1.2.1)
    end_el (1.2.1)
    end_lvl (1.2)
    end_el (1.2)
    end_lvl (1)
    end_el (1)
    start_el (2)
    end_el (2)

    假设方法配置都是默认的, 则:

    start_lvl 为

      end_lvl 为

    start_el 为
  • 和内容部分
    end_el 为


  • 又设 "..." 为评论内容, 则代码生成如下:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24

  • ... (1)



    • ... (1.1)



    • ... (1.2)



      • ... (1.2.1)







  • ... (2)

  • 你可能感兴趣的:(【转载】WordPress 嵌套回复构成原理)