钩子文档

manage_posts_custom_column

💡 云策文档标注

概述

manage_posts_custom_column 是一个 WordPress 动作钩子,用于在文章列表表的每个自定义列中触发,允许开发者自定义列内容显示。此钩子仅对非层级文章类型(如普通文章)生效,需结合 manage_{$post_type}_posts_columns 过滤器使用。

关键要点

  • 钩子名称:manage_posts_custom_column,参数包括 $column_name(列名)和 $post_id(文章ID)。
  • 仅适用于非层级文章类型(如 posts),层级文章类型(如 pages)应使用 manage_pages_custom_column。
  • 可与 manage_{$post_type}_posts_columns 过滤器配合,添加或移除自定义列。
  • WordPress 预定义了多个列名(如 'title'、'author'、'categories'),可在自定义函数中通过 switch 语句处理。
  • 支持自定义文章类型,从 WP 3.1 起可使用 manage_{$post->$post_type}_posts_custom_column 针对特定类型。

代码示例

// 示例:为自定义文章类型 'books' 显示 'book_author' 和 'publisher' 列
function custom_columns( $column, $post_id ) {
    switch ( $column ) {
        case 'book_author':
            $terms = get_the_term_list( $post_id, 'book_author', '', ',', '' );
            if ( is_string( $terms ) ) {
                echo $terms;
            } else {
                _e( 'Unable to get author(s)', 'your_text_domain' );
            }
            break;
        case 'publisher':
            echo get_post_meta( $post_id, 'publisher', true );
            break;
    }
}
add_action( 'manage_posts_custom_column' , 'custom_columns', 10, 2 );

注意事项

  • 确保正确设置钩子优先级和参数数量(如 10, 2)。
  • 对于层级文章类型,避免使用此钩子,应改用 manage_pages_custom_column。
  • 自定义列名需在 manage_{$post_type}_posts_columns 过滤器中定义,否则不会触发此钩子。

📄 原文内容

Fires in each custom column in the Posts list table.

Description

This hook only fires if the current post type is non-hierarchical, such as posts.

Parameters

$column_namestring
The name of the column to display.
$post_idint
The current post ID.

More Information

Combined with the manage_{$post_type}_posts_columns filter, this allows you to add or remove (unset) custom columns to the list post/page/custom post type pages (which automatically appear in Screen Options). The action described in here works both for built in post types as well as custom post types. manage_{$post->$post_type}_posts_custom_column can be used in WP 3.1 and later for specific custom post types. Note that if the custom post type has 'hierarchical' => true, then the correct action hook to use is manage_pages_custom_column.

Predefined Column Names:

The following column filters are already defined and used by WordPress. These can be redefined within a custom filter switch statement.

cb‘: checkbox for selecting post items for bulk actions
title‘: displays the post title as well as post action links (edit, quick edit, trash, view) based on user permissions
author‘: displays the username of the post author as a link to filter post by author
categories‘: displays the post categories as links to filter post by category
tags‘: displays the post tags as links to filter post by tags
comments‘: displays a comment icon with the number of comments as a permalink to manage the comments for that post
date‘: displays the date and status of the post

Source

do_action( 'manage_posts_custom_column', $column_name, $post->ID );

Changelog

Version Description
1.5.0 Introduced.

User Contributed Notes

  1. Skip to note 3 content

    Example Migrated from Codex:

    Display Custom Post Type:

    Suppose you have a ‘books’ custom post type and you want the “publisher” and “book author” to show up in the browse page.

    function custom_columns( $column, $post_id ) {
    	switch ( $column ) {
    		case 'book_author':
    			$terms = get_the_term_list( $post_id, 'book_author', '', ',', '' );
    			if ( is_string( $terms ) ) {
    				echo $terms;
    			} else {
    				_e( 'Unable to get author(s)', 'your_text_domain' );
    			}
    			break;
    
    		case 'publisher':
    			echo get_post_meta( $post_id, 'publisher', true ); 
    			break;
    	}
    }
    add_action( 'manage_posts_custom_column' , 'custom_columns', 10, 2 );

  2. Skip to note 4 content

    Example Migrated from Codex:

    Sticky Posts:

    Built-in posts can be made sticky. manage_posts_custom_column can be used to show this in the post list.

    /* Display custom column stickiness */
    function display_posts_stickiness( $column, $post_id ) {
        if ($column == 'sticky'){
            echo '<input type="checkbox" disabled', ( is_sticky( $post_id ) ? ' checked' : ''), '/>';
        }
    }
    add_action( 'manage_posts_custom_column' , 'display_posts_stickiness', 10, 2 );
    
    /* Add custom column to post list */
    function add_sticky_column( $columns ) {
        return array_merge( $columns, 
            array( 'sticky' => __( 'Sticky', 'your_text_domain' ) ) );
    }
    add_filter( 'manage_posts_columns' , 'add_sticky_column' );