向列表中添加自定义列时访问$POST对象

时间:2020-05-28 作者:Will Fairhurst

我们有一个名为“products”的自定义post类型,出于性能原因,它将所有附加元数据存储在一个单独的表中(我们预计会有1000条记录)。我们扩展了在管理区域的“产品”列表页面上执行的查询,以将所有附加元数据包含在生成的“posts”对象中(例如product\\u supplier、product\\u featured等)。

问题是,我们希望在列表中添加一些额外的列,而不执行额外的DB查询来查找数据(因为它已经在上面提到的“posts”对象中)。我们通常会使用过滤器“manage\\u product\\u posts\\u custom\\u column”来定义自定义列内容,但这只传递了$post\\u id,而不是$post对象(它包含我们需要的所有信息,无需额外查询)。

在我看来,我们要么需要将$post对象设置为全局变量,以便可以从“manage\\u product\\u posts\\u custom\\u column”过滤器中访问它,要么需要以某种方式添加添加列方法(将数据传递给$item对象)。假设第二个方法可以使用自定义列表表类,但我们只想扩展WP\\u Posts\\u List\\u表来添加addition列方法。问题是我不知道怎么做。。。

希望这一切都有意义,有人会有一个如何实现这一点的想法。

干杯

1 个回复
SO网友:Tom J Nowell

你不需要全球$post 对象,WP为列回调提供post ID,这就是所需的全部内容。

看看这个question/answer, 我们看到以下代码:

add_filter( \'manage_book_posts_columns\', \'set_custom_edit_book_columns\' );
function set_custom_edit_book_columns($columns) {
....
    $columns[\'publisher\'] = __( \'Publisher\', \'your_text_domain\' );

    return $columns;
}

add_action( \'manage_book_posts_custom_column\' , \'custom_book_column\', 10, 2 );
function custom_book_column( $column, $post_id ) {
    switch ( $column ) {
....
        case \'publisher\' :
            echo get_post_meta( $post_id , \'publisher\' , true ); 
            break;

    }
}
请注意$post_id 然后用于检索post meta,如果需要post对象,$current_post = get_post( $post_id ) 可以使用。

通常,您不需要依赖全局变量,尤其是$post, 几乎所有API都采用post ID,post变量上的每个字段都可以作为可过滤的API函数使用。e、 g。get_the_title()

相关推荐

全局$wp_admin_bar始终返回NULL

开发插件并希望访问$wp\\u admin\\u bar全局变量,但它总是返回null?我可以输出$wp\\U版本吗?function test() { global $wp_admin_bar; var_dump($wp_admin_bar); die; } test(); 有人知道这是怎么回事吗?