首页 > 解决方案 > 为排序和订购 WooCommerce 产品的排序选项添加自定义属性

问题描述

我希望在我的网站上能够订购产品页面(woocommerce)以及经典设置

而且还具有所有产品中都存在的属性

我找到了各种关于它的帖子并进行了几次测试......但我不是程序员......我仍然无法解决问题。

我找到了这篇文章

https://docs.woocommerce.com/document/custom-sorting-options-ascdesc/

解释如何添加

它工作正常,但我不明白,从这段代码开始,你需要添加/修改什么来用我的自定义属性替换随机。

我的属性名称是“pa_kj” 它的值是字母数字

我提前感谢大家的任何建议

标签: woocommerceattributesproduct

解决方案


我在网上找到了这段代码

https://gist.github.com/bekarice/0df2b2d54d6ac8076f84

<?php
/**
 * Adds WooCommerce catalog sorting options using postmeta, such as custom fields
 * Tutorial: http://www.skyverge.com/blog/sort-woocommerce-products-custom-fields/
**/
function skyverge_add_postmeta_ordering_args( $sort_args ) {
        
    $orderby_value = isset( $_GET['orderby'] ) ? wc_clean( $_GET['orderby'] ) : apply_filters( 'woocommerce_default_catalog_orderby', get_option( 'woocommerce_default_catalog_orderby' ) );
    switch( $orderby_value ) {
    
        // Name your sortby key whatever you'd like; must correspond to the $sortby in the next function
        case 'location':
            $sort_args['orderby']  = 'meta_value';
            // Sort by meta_value because we're using alphabetic sorting
            $sort_args['order']    = 'asc';
            $sort_args['meta_key'] = 'location';
            // use the meta key you've set for your custom field, i.e., something like "location" or "_wholesale_price"
            break;
                
        case 'points_awarded':
            $sort_args['orderby'] = 'meta_value_num';
            // We use meta_value_num here because points are a number and we want to sort in numerical order
            $sort_args['order'] = 'desc';
            $sort_args['meta_key'] = 'points';
            break;
        
    }
    
    return $sort_args;
}
add_filter( 'woocommerce_get_catalog_ordering_args', 'skyverge_add_postmeta_ordering_args' );


// Add these new sorting arguments to the sortby options on the frontend
function skyverge_add_new_postmeta_orderby( $sortby ) {
    
    // Adjust the text as desired
    $sortby['location'] = __( 'Sort by location', 'woocommerce' );
    $sortby['points_awarded'] = __( 'Sort by points for purchase', 'woocommerce' );
    
    return $sortby;
}
add_filter( 'woocommerce_default_catalog_orderby_options', 'skyverge_add_new_postmeta_orderby' );
add_filter( 'woocommerce_catalog_orderby', 'skyverge_add_new_postmeta_orderby' );

但它不适用于最新版本的 Woocommerce,它总是返回没有找到产品的页面。

有没有经验的人可以推荐要修改的代码?

再次感谢


推荐阅读