直到WooCommerce 8.4之前,下面的代码工作得很好,可以将"Shipping method"和"Payment method"列添加到订单视图中,并且它完全根据需要显示了细节.默认的发货和付款列不显示我们需要的所有细节.

现在,在WooCommerce 8.6.1更新后,这两个列不会出现,无论是否启用高性能订单存储(HPOS). 代码是在functions.php文件中,这两个额外的列也出现在这里的显示设置:

enter image description here

我知道由于WooCommerce版本的变化,我应该相应地调整代码,但我不确定具体如何调整.我最初认为HPOS是不同之处,但即使我在8.6.1中切换回传统模式,这两列也没有再次出现.

// Add shipping method and payment method columns to order page
add_filter( 'manage_edit-shop_order_columns', 'add_custom_columns_to_admin_orders', 20);
function add_custom_columns_to_admin_orders( $columns ) {
    $new_columns = array();

    foreach ( $columns as $column_name => $column_info ) {
        $new_columns[ $column_name ] = $column_info;

        if ( 'order_total' === $column_name ) {
            $new_columns['order_shipping'] = __( 'Tarnemeetod', 'my-textdomain' );
            $new_columns['order_payment'] = __( 'Maksemeetod', 'my-textdomain' );
        }
    }
    return $new_columns;
}


add_action( 'manage_shop_order_posts_custom_column', 'custom_columns_content_in_admin_orders' );
function custom_columns_content_in_admin_orders( $column ) {
    global $post, $the_order;

    if ( 'order_shipping' === $column )
    {
        echo $the_order->get_shipping_method();
    }
    if ( 'order_payment' === $column ) {
        echo $the_order->get_payment_method_title();
    }
}
// Make payment methods searchable
add_filter( 'woocommerce_shop_order_search_fields', 'makse_otsing' );
function makse_otsing( $meta_keys ){
    $meta_keys[] = '_payment_method_title';
    return $meta_keys;
}
// Make shipping methods searchable
add_filter( 'woocommerce_shop_order_search_fields', 'tarne_otsing' );
function tarne_otsing( $meta_keys ){
    $meta_keys[] = '_shipping_method';
    return $meta_keys;
}

推荐答案

我已经在Classic Order(不是HPOS)上测试了你在WooCommerce上的代码,你的代码在最新的WooCommerce版本上可以工作,所以还有一些其他的东西在制造麻烦.

基于Filtering orders list in WooCommerce with HPOS个回答线程,下面是让你的代码与High-Performance Order Storage (HPOS)兼容的方法:

// Add shipping method and payment method columns to order page
add_filter( 'manage_woocommerce_page_wc-orders_columns', 'add_custom_columns_to_admin_orders', 20); // HPOS
add_filter( 'manage_edit-shop_order_columns', 'add_custom_columns_to_admin_orders', 20);
function add_custom_columns_to_admin_orders( $columns ) {
    $new_columns = array();

    foreach ( $columns as $column_name => $column_info ) {
        $new_columns[ $column_name ] = $column_info;

        if ( 'order_total' === $column_name ) {
            $new_columns['order_shipping'] = __( 'Tarnemeetod', 'my-textdomain' );
            $new_columns['order_payment'] = __( 'Maksemeetod', 'my-textdomain' );
        }
    }
    return $new_columns;
}

add_action('manage_woocommerce_page_wc-orders_custom_column', 'custom_columns_content_in_admin_orders', 10, 2); // HPOS
add_action( 'manage_shop_order_posts_custom_column', 'custom_columns_content_in_admin_orders', 10, 2);
function custom_columns_content_in_admin_orders( $column, $order ) {
    if( ! is_a($order, 'WC_order') && $order > 0 ) {
        $order = wc_get_order( $order );
    }

    if ( 'order_shipping' === $column ) {
        echo $order->get_shipping_method();
    } 
    elseif ( 'order_payment' === $column ) {
        echo $order->get_payment_method_title();
    }
}

// Make payment methods searchable
add_filter( 'woocommerce_order_table_search_query_meta_keys', 'makse_ja_tarne_otsing' ); // HPOS
add_filter( 'woocommerce_shop_order_search_fields', 'makse_ja_tarne_otsing' );
function makse_ja_tarne_otsing( $meta_keys ){
    $meta_keys[] = '_payment_method_title';
    $meta_keys[] = '_shipping_method';

    return $meta_keys;
}

代码将在子主题的functions.php文件中(或插件中).

测试和工作在WooCommerce最新版本(8.6.1)与或不启用High-Performance Order Storage (HPOS).

enter image description here

确保在"屏幕选项"选项卡(位于右上角),您的2个自定义列仍然显示/启用.

判断代码是否位于active主题(或子主题)的正确functions.php文件中.

如果您的自定义列仍未显示,请首先进行数据库备份.然后try 禁用除WooCommerce之外的所有插件.然后判断是否显示了这些列.

  • 如果是这样的话,一个插件正在制造麻烦:一个接一个地启用插件,并在其间每次判断.
  • 如果不是这样,重新启用你的插件,并try 暂时删除你的其他定制代码(保持这个定制代码在管理订单列表中显示2列... …等

Php相关问答推荐

在WooCommerce中执行一次银行电汇确认付款代码

如何使用属性#[Embedded]嵌入带有规则的对象集合?

如何在Foreach语句中使用php和li按降序排序?

使用php ZipArhive类将Zip压缩文件分成多个部分

设置WordPress最近的帖子小部件按修改日期排序

从字符串转换日期和/或时间时,Laravel转换失败

如果WooCommerce购物车在 checkout 时被清空,请重定向至store 页面

在WooCommerce Admin产品列表自定义列中显示来自元数据的统计数据

根据WooCommerce的定制订单状态增加产品库存

如何在其他数组php中创建具有关联数组的数组

execute_query 和prepare+execute 有什么区别?

如何使用 PHP 创建简化的 twig 替换?

Docker-用于部署的 PHP 应用程序映像无法在本地运行

多个产品类别 Select 自定义 WooCommerce 插件设置页面

woocommerce checkout 页面上的自定义字段

MongoDB Laravel Jenssegers 包:插入数据库时​​未定义的类常量PRIMARY

Laravel Eloquent(where 子句)

Laravel 发送邮箱问题 Swift_TransportException

带有 nginx 的 Symfony 不提供 .js 和 .css 文件

在 GA4 Data API V1 Beta 中使用 inListFilter 过滤器时出错