如何仅为WordPress后台标准文章添加浏览量列,排除自定义文章类型?
更高效的WordPress文章浏览量列控制方案
嘿,这个场景我之前也碰到过——逐个移除自定义文章类型里的浏览量列确实有点繁琐,其实我们可以从根源上解决问题,不用先添加再删除,而是一开始就只给标准博客文章(post类型)添加这个列,这样效率会高很多!
方法一:针对特定文章类型的钩子添加列
WordPress的列管理钩子支持按文章类型细分,格式是manage_{post_type}_posts_columns,把{post_type}替换成目标类型的slug(这里就是post)。这样代码只会作用在标准文章列表上,自定义文章类型根本不会出现这个列。
示例代码:
// 仅给标准博客文章添加浏览量列 add_filter( 'manage_post_posts_columns', 'add_post_views_column' ); function add_post_views_column( $columns ) { // 在列数组中添加浏览量列 $columns['post_views'] = '浏览量'; return $columns; } // 输出浏览量列的内容,同样使用post类型专属钩子 add_action( 'manage_post_posts_custom_column', 'display_post_views_column', 10, 2 ); function display_post_views_column( $column, $post_id ) { if ( 'post_views' === $column ) { // 获取并输出文章浏览量 $views = get_post_meta( $post_id, 'post_views_count', true ); echo esc_html( $views ? $views : '0' ); } }
方法二:全局钩子中条件判断文章类型
如果因为某些需求必须使用全局的manage_posts_columns钩子,那我们可以在添加列之前,先判断当前页面的文章类型是不是post,只有符合条件才添加列。
示例代码:
add_filter( 'manage_posts_columns', 'add_post_views_column_conditionally' ); function add_post_views_column_conditionally( $columns ) { // 获取当前后台页面的信息 $current_screen = get_current_screen(); // 仅当当前是标准文章列表页时,添加浏览量列 if ( $current_screen && $current_screen->post_type === 'post' ) { $columns['post_views'] = '浏览量'; } return $columns; } // 输出列内容时也做双重验证 add_action( 'manage_posts_custom_column', 'display_post_views_column_conditionally', 10, 2 ); function display_post_views_column_conditionally( $column, $post_id ) { if ( 'post_views' === $column ) { // 额外确认当前文章是标准博客类型 $post_type = get_post_type( $post_id ); if ( $post_type === 'post' ) { $views = get_post_meta( $post_id, 'post_views_count', true ); echo esc_html( $views ? $views : '0' ); } } }
为什么这两种方法更高效?
- 方法一直接利用了WordPress的类型专属钩子,代码逻辑更简洁,完全避免了多余列的生成,性能最优。
- 方法二通过条件判断减少了不必要的操作,比逐个移除自定义类型列的代码更易维护(比如新增自定义类型时,不用再额外写移除代码)。
内容的提问来源于stack exchange,提问作者danzo
相关产品推荐
相关产品推荐

