今天去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