当前位置: 首页 > 面试题库 >

在WooCommerce管理订单列表页面中按产品发布类型过滤订单

汤英豪
2023-03-14
问题内容

我是WooCommerce的新手,我想自定义管理订单列表页面。所以基本上我创建了新产品类型。现在,我还限制了客户一次可以购买我的自定义产品类型的产品或简单产品类型的产品。

现在在管理订单列表页面中,我想显示具有简单产品类型产品的订单。我该怎么做?

我进行了很多搜索,发现了一个具有过滤器的插件,可以按产品而不是产品类型显示订单。在研究该插件时,我知道可能可以使用posts_where操作来完成此操作。但是我没有正确的主意。


问题答案:

以下功能将在管理员订单列表中添加其他过滤器下拉列表,使您可以根据订单商品产品过帐类型过滤订单:

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

    if( 'shop_order' === $post_type && 'edit.php' === $pagenow ) {
        $domain     = 'woocommerce';
        $filter_id  = 'filter_product_type';
        $current    = isset($_GET[$filter_id])? $_GET[$filter_id] : '';
        $query_args = ['taxonomy' => 'product_type', 'fields' => 'names', 'orderby' => 'order'];

        echo '<select name="'.$filter_id.'">
        <option value="">' . __('Filter by Product post type', $domain) . '</option>';

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

add_action( 'pre_get_posts', 'process_admin_shop_order_product_type_filter' );
function process_admin_shop_order_product_type_filter( $query ) {
    global $pagenow, $post_type, $wpdb;

    $filter_id = 'filter_product_type';

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

        $order_ids = $wpdb->get_col( "
            SELECT DISTINCT o.ID
            FROM {$wpdb->prefix}posts o
            INNER JOIN {$wpdb->prefix}woocommerce_order_items oi
                ON oi.order_id = o.ID
            INNER JOIN {$wpdb->prefix}woocommerce_order_itemmeta oim
                ON oi.order_item_id = oim.order_item_id
            INNER JOIN {$wpdb->prefix}term_relationships tr
                ON oim.meta_value = tr.object_id
            INNER JOIN {$wpdb->prefix}term_taxonomy tt
                ON tr.term_taxonomy_id = tt.term_taxonomy_id
            INNER JOIN {$wpdb->prefix}terms t
                ON tt.term_id = t.term_id
            WHERE o.post_type = '$post_type'
            AND oim.meta_key = '_product_id'
            AND tt.taxonomy = 'product_type'
            AND t.name = '{$_GET[$filter_id]}'
        ");

        $query->set( 'post__in', $order_ids ); // Set the new "meta query"

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

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

代码进入您的活动子主题(或活动主题)的functions.php文件中。经过测试和工作。



 类似资料:
  • 我第一次使用woocommerce(wordpress)。 我试图在树形中显示所有产品类别及其各自的子类别,但我似乎不能像在后端使用拖放方式订购它们那样订购它们。 WP get_terms()只允许按id、名称、计数、slug和none排序。 我使用的代码是:

  • 我使用以下代码在WooCommerce管理订单详细信息页面的订单项表中显示自定义产品元: 它显示“前缀tempiconsegna”,这是自定义图元,如: 可在3天内提供 我的问题是,如果我改变了产品的可用性,它也改变了以前的订单。 当我更新产品的可用性时,如何在不改变的情况下显示订单时的值?

  • 我有一家woocommerce商店,想定制我的产品。用户直接访问类别页面,无店铺存档页面。 你有没有什么好的方法来定制订单?我试着使用插件,并给那些产品一个编号。。。但一切都没有奏效。 问候

  • 我使用Woocommerce插件在wordpress中开发了购物车。我需要按产品价格在购物车订单中显示产品,请帮助我做到这一点 谢啦

  • 我想在Woocommerce的管理员查看订单页面上添加futured图像。已创建新列,但未显示产品图像。我应该如何显示订单缩略图?谢谢

  • 订单管理位于WooCommerce - 订单下,当你的站点开始收到订单后,就能看到这个菜单。订单仅对管理员和商店经理/Shop Manager可见,每个订单有一个唯一的ID,这个ID就是WordPress post_id,是不连续的。本文简单介绍一下WooCommerce订单管理的方法。 订单状态的含义 待付款 / Pending Payment 成功下单但未支付订单,等待付款。如果支付网关的no