今天去Wp Recipes逛了一下,发现一篇很有用的文章,描述如何在WordPress后台文章列表页面显示Pingbacks和Trackbacks。Sola的pings不多,不过真正让我有兴趣的是了解如何在post或者page的列表页面添加新的表单栏目。
来自Wp Recipes的代码
Sola自己试了一下,这段代码可以在文章列表页面显示一个新的栏目名为Counts,该栏目显示文章获得的pings数量,将代码放在主题的functions.php中即可看到效果,但从功能上讲,Sola认为这个做成插件更合适,因为它与内容相关,而非样式相关。
function commentCount($type = 'comments'){ if($type == 'trackbacks'): $typeSql = 'comment_type = "trackback"'; $oneText = 'One :trackback'; $moreText = '% :trackbacks'; $noneText = 'No :trackbacks'; elseif($type == 'pingbacks'): $typeSql = 'comment_type = "pingback"'; $oneText = 'One :pingback'; $moreText = '% :pingbacks'; $noneText = 'No :pingbacks'; endif; global $wpdb; $result = $wpdb->get_var(' SELECT COUNT(comment_ID) FROM '.$wpdb->comments.' WHERE '.$typeSql.' AND comment_approved="1" AND comment_post_ID= '.get_the_ID() ); if($result == 0): echo str_replace('%', $result, $noneText); elseif($result == 1): echo str_replace('%', $result, $oneText); elseif($result > 1): echo str_replace('%', $result, $moreText); endif; } add_filter('manage_posts_columns', 'posts_columns_counts', 1); add_action('manage_posts_custom_column', 'posts_custom_columns_counts', 1, 2); function posts_columns_counts($defaults){ $defaults['wps_post_counts'] = __('Counts'); return $defaults; } function posts_custom_columns_counts($column_name, $id){ if($column_name === 'wps_post_counts'){ commentCount('trackbacks'); echo "<br />"; commentCount('pingbacks'); } }
代码中并没有添加翻译支持,如果需要显示中文,将每个字符串都用__()函数替代。
学到的知识
学习就要举一反三,既然可以给posts添加,肯定也可以给page甚至自定义文章类型列表添加。上面代码用到的一个action和一个filter分别为
add_filter('manage_posts_columns', 'posts_columns_counts', 1); add_action('manage_posts_custom_column', 'posts_custom_columns_counts', 1, 2);
filter: manage_pages_columns负责添加新的表单栏目Counts,与之类似的filters有
manage_pages_columns: 修改page页面栏目
manage_{$post_type}_posts_columns: 修改custom post type的列表页栏目
和manage_pages_columns一样,他们也接受参数$posts_columns,该参数记载了所有已经生效的栏目。
action: manage_posts_custom_column则负责输出栏目的内容,与它类似的action有
manage_pages_custom_column:适用于page类型的
manage_{$post->post_type}_posts_custom_column: 针对custom post type的
值得一提的是manage_posts_columns其实也接受第二个参数$post_type,原型如下
$posts_columns = apply_filters( 'manage_posts_columns', $posts_columns, $post_type );
manage_pages_custom_column同理
do_action( 'manage_posts_custom_column', $column_name, $post->ID );
官方文档:http://codex.wordpress.org/Plugin_API/Action_Reference/manage_posts_custom_column