php - WooCommerce 根据添加的自定义 header 字段过滤管理订单列表

标签 php wordpress woocommerce product hook-woocommerce

在 WooCommerce 中,我在管理订单列表中添加了一个新的自定义列“语言”,其中自定义值为“日语”或“非日语”。

我应该如何添加日语和非日语的过滤选项。

enter image description here

我使用以下代码添加了一个过滤器下拉列表:

add_action( 'restrict_manage_posts', 'wpse45436_admin_posts_filter_restrict_manage_posts' );
function wpse45436_admin_posts_filter_restrict_manage_posts(){
    global $post_type;
    if( $post_type == 'shop_order' ) {
        //change this to the list of values you want to show
        //in 'label' => 'value' format
        $values = array(
            'Japanese' => 'Japanese', 
            'Non Japanese' => 'Non Japanese',
        );
        ?>
        <select name="ADMIN_FILTER_FIELD_VALUE">
        <option value=""><?php _e('Filter By ', 'wose45436'); ?></option>
        <?php
            $current_v = isset($_GET['ADMIN_FILTER_FIELD_VALUE'])? $_GET['ADMIN_FILTER_FIELD_VALUE']:'';
            foreach ($values as $label => $value) {
                printf (
                    '<option value="%s"%s>%s</option>',
                    $value,
                    $value == $current_v? ' selected="selected"':'',
                    $label
                );
            }
        ?>
        </select>
        <?php
    }
}

我还添加了一些用于过滤订单列表的代码,但它不起作用,这是我的代码:

add_action( 'pre_get_posts', 'apply_my_custom_product_filters' );
function apply_my_custom_product_filters( $query ) {

    global $pagenow;
    $paged = (get_query_var('paged')) ? get_query_var('paged') : 1; 
    if ( $query->is_admin && $pagenow == 'edit.php' && isset( $_GET['ADMIN_FILTER_FIELD_VALUE'] ) && $_GET['ADMIN_FILTER_FIELD_VALUE'] != '' && $_GET['post_type'] == 'shop_order' ) {

       $meta_key_query = array(
          array(
              'meta_key'     => 'order_add_language',
              'value'   => esc_attr( $_GET['ADMIN_FILTER_FIELD_VALUE'] ),
              'compare' => '=',
          ),
          'posts_per_page' => 10,
          'paged' => $paged,
      );

      $query->set( 'meta_query', $meta_key_query );
    }
}

最佳答案

您的代码中存在一些错误...请尝试重新访问以下代码:

add_action( 'restrict_manage_posts', 'display_admin_shop_order_language_filter' );
function display_admin_shop_order_language_filter(){
    global $pagenow, $post_type;

    if( 'shop_order' === $post_type && 'edit.php' === $pagenow ) {
        $domain    = 'woocommerce';
        $languages = array( __('Japanese', $domain), __('Non Japanese', $domain) );
        $current   = isset($_GET['filter_shop_order_language'])? $_GET['filter_shop_order_language'] : '';

        echo '<select name="filter_shop_order_language">
        <option value="">' . __('Filter By ', $domain) . '</option>';

        foreach ( $languages as $value ) {
            printf( '<option value="%s"%s>%s</option>', $value, 
                $value === $current ? '" selected="selected"' : '', $value );
        }
        echo '</select>';
    }
}

add_action( 'pre_get_posts', 'process_admin_shop_order_language_filter' );
function process_admin_shop_order_language_filter( $query ) {
    global $pagenow;

    if ( $query->is_admin && $pagenow == 'edit.php' && isset( $_GET['filter_shop_order_language'] ) 
        && $_GET['filter_shop_order_language'] != '' && $_GET['post_type'] == 'shop_order' ) {

        $meta_query = $query->get( 'meta_query' ); // Get the current "meta query"

        $meta_query[] = array( // Add to "meta query"
            'meta_key' => 'order_add_language',
            'value'    => esc_attr( $_GET['filter_shop_order_language'] ),
        );
        $query->set( 'meta_query', $meta_query ); // Set the new "meta query"

        $query->set( 'posts_per_page', 10 ); // Set "posts per page"

        $query->set( 'paged', ( get_query_var('paged') ? get_query_var('paged') : 1 ) ); // Set "paged"
    }
}

代码位于事件子主题(或事件主题)的 function.php 文件中。它应该有效。

关于php - WooCommerce 根据添加的自定义 header 字段过滤管理订单列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55451123/

相关文章:

php - 我的登录 PHP 脚本出现故障

php - 如何从 MySQL 中调用 PHP 中的 SELECTED 选项?

javascript - 使用 jquery 删除 <br> 标签?

javascript - Backbone - 当用户通过特定帖子访问网站时如何管理集合初始化?

php - “WC_Abstract_Legacy_Order->__get, wc_doing_it_wrong” WooCommerce错误

php - 使用 LIKE 子句的 MySql 搜索不起作用

php - 无法使用用户名将数据输入到评论框中

php - Wordpress:按列对帖子进行排序的最佳方式

php - 当我将它们留空时,Woocommerce 自定义字段不会更新,并且仍然显示空字段

php - 使用 Woocommerce 方法保存产品属性不同步到前端