WooCommerce不允许我向shop_order帖子类型添加自定义列

时间:2014-03-06 22:21:22

标签: wordpress-plugin woocommerce add-filter

我刚刚开始编写插件并立即遇到问题。我想在WooCommerce管理员的订单概述页面中添加一列。下面的直接过滤器没有做任何事情。但是,使用shop_orderpost替换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

如何解决这个问题?

3 个答案:

答案 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' ); 
}