将自定义列添加到自定义支柱类型

时间:2017-01-23 作者:Chin Leung

我以前做过,但我忘记了钩子的名称,在任何地方都找不到。。。

我想做的是在admin中的自定义post类型列表中添加一些自定义列。

例如,在管理中,单击文章,我想在那里添加自定义列。

6 个回复
最合适的回答,由SO网友:Dave Romsey 整理而成

用于为自定义帖子类型创建自定义列及其关联数据的挂钩包括manage_{$post_type}_posts_columnsmanage_{$post_type}_posts_custom_column 分别,其中{$post_type} 自定义帖子类型的名称。

文档中的此示例删除了作者列,并添加了分类法和元数据列:

// Add the custom columns to the book post type:
add_filter( \'manage_book_posts_columns\', \'set_custom_edit_book_columns\' );
function set_custom_edit_book_columns($columns) {
    unset( $columns[\'author\'] );
    $columns[\'book_author\'] = __( \'Author\', \'your_text_domain\' );
    $columns[\'publisher\'] = __( \'Publisher\', \'your_text_domain\' );

    return $columns;
}

// Add the data to the custom columns for the book post type:
add_action( \'manage_book_posts_custom_column\' , \'custom_book_column\', 10, 2 );
function custom_book_column( $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;

    }
}

SO网友:Carlos Santos

我写了一个函数manage_{$post_type}_posts_columns 过滤器和manage_{$post_type}_posts_custom_column 行动

function add_admin_column($column_title, $post_type, $cb){

    // Column Header
    add_filter( \'manage_\' . $post_type . \'_posts_columns\', function($columns) use ($column_title) {
        $columns[ sanitize_title($column_title) ] = $column_title;
        return $columns;
    } );

    // Column Content
    add_action( \'manage_\' . $post_type . \'_posts_custom_column\' , function( $column, $post_id ) use ($column_title, $cb) {

        if(sanitize_title($column_title) === $column){
            $cb($post_id);
        }

    }, 10, 2 );
}
用法:

add_admin_column(__(\'EAN\'), \'product\', function($post_id){
    echo get_post_meta( $post_id , \'ean\' , true ); 
});

SO网友:DGStefan

我不确定它是否是您希望显示为列的默认自定义元数据,但您可以考虑使用这个免费插件,它允许您添加列以显示自定义字段。https://wordpress.org/plugins/codepress-admin-columns/

pro版本甚至允许您向这些列添加过滤、排序和内联编辑。

SO网友:David Salcer

基于Carlos的回应(非常感谢),我想添加一个小缩略图,但不是一个特色图片,一个来自自定义metabox。

我补充说:

add_admin_column(__(\'Thumbnail\'), \'obraz\', function($post_id){
$image_id =  get_post_meta( $post_id , \'custom_thumbnail_metabox\' , true );
echo \'<img src="\'.wp_get_attachment_image_url($image_id).\'" />\';
信息:post meta将获取附件/图像的ID,这就是稍后调用wp\\u get\\u attachment\\u image\\u url的原因

SO网友:Purple Tentacle

对于woocommerce订单,我需要使用过滤器:manage\\u edit-shop\\u order\\u columns。

add_filter( \'manage_edit-shop_order_columns\', \'manage_shop_order_posts_columns\', 10, 1 );
manage_shop_order_posts_columns($columns) {
    $columns[\'test\'] = \'Test\';
    return $columns;
}
然后填充字段:

add_action( \'manage_shop_order_posts_custom_column\' , \'manage_shop_order_custom_column\', 10, 2 );
function manage_shop_order_custom_column($column, $post_id) {
    switch ( $column )
    {
        case \'test\' :
            echo \'1234\';
            break;
    }
}

SO网友:Tyler

guide 为我工作。就我而言,我正在使用CPT UI 要创建自定义帖子类型,ACF 创建自定义帖子字段,以及Code Snippets 把所有东西粘在一起。

我在下面包含了代码的简化版本。

改变custom-post-type-slug, custom_post_type_slug, 和custom_column_name 以满足您的需要。更改名称时,请确保保持相同的破折号/下划线格式。

请注意get_field() 特定于ACF插件。如果未使用ACF,则可能需要使用内置get_post_meta() WordPress函数用于检索和显示帖子元数据。

add_filter(\'manage_custom-post-type-slug_posts_columns\', \'set_custom_edit_custom_post_type_slug_columns\');

function set_custom_edit_custom_post_type_slug_columns($columns) {
    $columns[\'custom_column_name\'] = \'Custom Column Title\';
    return $columns;
}

add_action(\'manage_custom-post-type-slug_posts_custom_column\' , \'custom_custom_post_type_slug_column\', 10, 2);

function custom_custom_post_type_slug_column($column, $post_id) {
    switch ($column) {
        case \'custom_column_name\':
            echo get_field(\'custom_column_name\', $post_id);
            break;
    }
}

add_filter(\'manage_edit-custom-post-type-slug_sortable_columns\', \'set_custom_custom_post_type_slug_sortable_columns\');

function set_custom_custom_post_type_slug_sortable_columns($columns) {
    $columns[\'custom_column_name\'] = \'custom_column_name\';
    return $columns;
}

add_action(\'pre_get_posts\', \'custom_post_type_slug_custom_orderby\');

function custom_post_type_slug_custom_orderby($query) {
    if ( ! is_admin()) {
        return;
    }

    $orderby = $query->get(\'orderby\');

    if (\'custom_column_name\' == $orderby) {
        $query->set(\'meta_key\', \'custom_column_name\');
        $query->set(\'orderby\', \'meta_value_num\');
    }
}