php - 在 Woocommerce 档案中按自定义元键对产品进行排序
问题描述
我想按折扣百分比从高到低或从低到高对产品进行排序。我正在使用 urna 主题,但排序无法正常工作。如果折扣百分比相同,我希望它的折扣百分比明智,它将显示价格从高到低或从低到高。我使用更多的排序插件。但它不能正常工作。请帮助这个。我是woocommerce的初学者。请帮忙
我的代码
<?php
add_filter( 'woocommerce_get_catalog_ordering_args', 'mycode_woocommerce_add_salediscount_to_catalog_ordering_args' );
function mycode_woocommerce_add_salediscount_to_catalog_ordering_args( $args ) {
$orderby_value = isset( $_GET['orderby'] ) ? woocommerce_clean( $_GET['orderby'] ) : apply_filters( 'woocommerce_default_catalog_orderby', get_option( 'woocommerce_default_catalog_orderby' ) );
if ( 'discount' == $orderby_value ) {
$args['orderby'] = 'meta_value_num';
$args['order'] = 'DESC';
$args['meta_key'] = '_dfrps_salediscount';
}
return $args;
}
add_filter( 'woocommerce_default_catalog_orderby_options', 'mycode_woocommerce_add_salediscount_to_catalog_orderby' );
add_filter( 'woocommerce_catalog_orderby', 'mycode_woocommerce_add_salediscount_to_catalog_orderby' );
function mycode_woocommerce_add_salediscount_to_catalog_orderby( $sortby ) {
$sortby['discount'] = 'Sort by discount';
return $sortby;
}
解决方案
您可以尝试改用以下内容:
add_filter( 'woocommerce_get_catalog_ordering_args', 'enable_catalog_ordering_by_meta' );
function enable_catalog_ordering_by_meta( $args ) {
$meta_key = '_dfrps_salediscount';
if ( isset( $_GET['orderby'] ) ) {
if ( 'custom_meta1' == $_GET['orderby'] ) {
return array(
'orderby' => 'meta_value_num',
'order' => 'DESC',
'meta_key' => $meta_key,
);
}
// Make a clone of "menu_order" (default option)
elseif ( 'natural_order' == $_GET['orderby'] ) {
return array( 'orderby' => 'menu_order title', 'order' => 'ASC' );
}
}
return $args;
}
add_filter( 'woocommerce_catalog_orderby', 'add_catalog_orderby_by_meta' );
function add_catalog_orderby_by_meta( $orderby_options ) {
// Insert "Sort by product reference (sku)" and the clone of "menu_order"
return array(
'custom_meta1' => __("Sort by discount", "woocommerce");
'natural_order' => __("Sort by natural order", "woocommerce"), // <== To be renamed at your convenience
) + $orderby_options ;
}
add_filter( 'woocommerce_default_catalog_orderby', 'default_catalog_orderby_meta' );
function default_catalog_orderby_meta( $default_orderby ) {
return 'custom_meta1';
}
add_action( 'woocommerce_product_query', 'product_query_by_meta' );
function product_query_by_meta( $q ) {
$meta_key = '_dfrps_salediscount';
if ( ! isset( $_GET['orderby'] ) && ! is_admin() ) {
$q->set( 'orderby', 'meta_value_num' );
$q->set( 'order', 'DESC' );
$q->set( 'meta_key', $meta_key);
}
}
代码位于活动子主题(或活动主题)的 functions.php 文件中。它应该有效。
推荐阅读
- arrays - Powershell - 将来自 Foreach 循环的多个结果存储到一个数组中
- python - 在数据框 pandas 内过滤
- mongodb - 使用 mongosh 进行自动身份验证
- php - 带有 Fortify 的 Laravel 8.55 显示登录时找不到类“App\Providers\User”
- javascript - 如何为画布标签赋予样式?
- python - 如何分离大数据框并将其保存到新的较小数据框并将其导出到python中的csv文件?
- ruby-on-rails - 有什么方法可以知道最后一个 PostgreSQL 物化视图是什么时候更新的?
- javascript - 我的 getcookie 代码在 iphone 上不起作用
- networking - NAPT 是否包括端口转发?
- node.js - 在 mac M1 上安装 npm 时遇到问题