我刚刚开始编写插件并立即遇到问题。我想在WooCommerce管理员的订单概述页面中添加一列。下面的直接过滤器没有做任何事情。但是,使用shop_order
或post
替换product
会在相应的概述页面上显示额外的列。
add_filter('manage_edit-shop_order_columns', 'add_sales_column');
function add_sales_column($columns) {
$columns['order_sales'] = "Sales";
return $columns;
}
试试这个:
WC版本:2.1.5
WP版本:3.8.1
如何解决这个问题?
答案 0 :(得分:3)
从我的主题functions.php
文件向WooCommerce Orders概述页面添加自定义列时遇到类似问题。我可以通过将过滤器优先级提高到默认值10以上来显示自定义列。尝试使用以下代码替换代码:
add_filter('manage_edit-shop_order_columns', 'add_sales_column', 11);
function add_sales_column($columns) {
$columns['order_sales'] = "Sales";
return $columns;
}
在WP 3.9.1和WC 2.1.12上测试。
使用$priority
参数查看WordPress Codex entry on add_filter
以了解有关过滤器行为的详细信息。
答案 1 :(得分:2)
问题是我们必须等待WooCommerce完成其设置。这有两种方式,首先在plugins_loaded
主挂钩内运行所有挂钩,然后将挂钩的优先级设置为大于WC的挂钩。
add_action( 'plugins_loaded', 'setup_so_22237380' );
function setup_so_22237380()
{
// Just to make clear how the filters work
$posttype = "shop_order";
// Priority 20, with 1 parameter (the 1 here is optional)
add_filter( "manage_edit-{$posttype}_columns", 'column_set_so_22237380', 20, 1 );
// Priority 20, with 2 parameters
add_action( "manage_{$posttype}_posts_custom_column", 'column_display_so_22237380', 20, 2 );
// Default priority, default parameters (zero or one)
add_filter( "manage_edit-{$posttype}_sortable_columns", 'column_sort_so_22237380' );
}
function column_set_so_22237380( $columns )
{
$columns['order_sales'] = "Sales";
return $columns;
}
function column_display_so_22237380( $column_name, $post_id )
{
if ( 'order_sales' != $column_name )
return;
$sales_information = 'Your custom get_order_sales_information($post_id)';
if ( $sales_information )
echo "<strong style='color:#f00;'> $sales_information </strong>";
}
function column_sort_so_22237380( $columns )
{
$columns['order_sales'] = 'order_sales';
return $columns;
}
将列设置为 sortable 是可选的(manage_edit-{$posttype}_sortable_columns
),需要额外的操作挂钩才能使其正常工作(pre_get_posts
)。这可能是一个复杂的构建函数,需要own research。
答案 2 :(得分:0)
如果您在
中包含所有订单挂钩,它将正常工作add_action( 'admin_init', 'setup_all_order_column_hook' );
function setup_all_order_column_hook(){
//Just to make clear how the filters work
$posttype = "shop_order";
//Priority 20, with 1 parameter (the 1 here is optional)
add_filter( "manage_edit-{$posttype}_columns", 'column_set_so_22237380', 20, 1 );
//Priority 20, with 2 parameters
add_action( "manage_{$posttype}_posts_custom_column",column_display_so_22237380', 20, 2 );
// Default priority, default parameters (zero or one)
add_filter( "manage_edit-{$posttype}_sortable_columns",'column_sort_so_22237380' );
}