wordpress-文章列表页渲染过程

{
    "cb": "<input type=\"checkbox\" />",
    "title": "标题",
    "date": "日期",
    "fanhua_category_column": "分类"
}

◆ title列渲染

call_user_func 的 PHP 函数,调用指定以_column_开头并且后面跟着列名的方法,即_column_title方法。

// class-wp-list-table.php
elseif ( method_exists( $this, '_column_' . $column_name ) ) {
				echo call_user_func(
                    array( $this, '_column_' . $column_name ),
                    $item,
                    $classes,
                    $data,
                    $primary
                );

html渲染如下代码

// class-wp-posts-list-table.php
protected function _column_title( $post, $classes, $data, $primary ) {
    echo '<td class="' . $classes . ' page-title" ', $data, '>';
    echo $this->column_title( $post );
    echo $this->handle_row_actions( $post, 'title', $primary );
    echo '</td>';
}

◆ data列渲染

普通列【data】字段,则以column_开头并且后面跟着列名的方法,即column_data方法。

// class-wp-list-table.php
elseif ( method_exists( $this, 'column_' . $column_name ) ) {
				echo "<td $attributes>";
				echo call_user_func( array( $this, 'column_' . $column_name ), $item );
				echo $this->handle_row_actions( $item, $column_name, $primary );
				echo '</td>';

◆ 自定义列渲染

// class-wp-list-table.php
else {
    echo "<td $attributes>";
    echo $this->column_default( $item, $column_name );
    echo $this->handle_row_actions( $item, $column_name, $primary );
    echo '</td>';
}

字段【fanhua_category_column】是我自定义的,其<td>标签里的自定义值内容,是调用column_default方法并触发manage_{$post->post_type}_posts_custom_column动作钩子而后所赋具体的值。

// class-wp-posts-list-table.php
public function column_default( $item, $column_name ) {
   ...
   do_action( "manage_{$post->post_type}_posts_custom_column", $column_name, $post->ID );

}