Wordpress 如何按ACF值对WooCommerce产品进行分类?

Wordpress 如何按ACF值对WooCommerce产品进行分类?,wordpress,woocommerce,advanced-custom-fields,Wordpress,Woocommerce,Advanced Custom Fields,如何按高级自定义字段值对WooCommerce产品进行排序 我在网站的后端和前端添加了一些自定义字段。myfunctions.php中的前端实现如下所示: add_action( 'woocommerce_before_add_to_cart_form', 'tmy_eventbooking', 20 ); function tmy_eventbooking() { if( !empty( get_field('datum') ) ) { // if your custom field

如何按
高级自定义字段
值对
WooCommerce
产品进行排序

我在网站的后端和前端添加了一些自定义字段。my
functions.php
中的前端实现如下所示:

add_action( 'woocommerce_before_add_to_cart_form', 'tmy_eventbooking', 20 );

function tmy_eventbooking() {
    if( !empty( get_field('datum') ) ) { // if your custom field is not empty…
        echo '<p class="acf-info">Findet statt am: <span>' . get_field('datum') . '</span></p>';
    }
        if( !empty( get_field('datum_ende') ) ) { // if your custom field is not empty…
        echo '<p class="acf-info">Bis: <span>' . get_field('datum_ende') . '</span></p>';
    }
        if( !empty( get_field('veranstaltungsort') ) ) { // if your custom field is not empty…
        echo '<p class="acf-info">Ort: <span>' . get_field('veranstaltungsort') . '</span></p>';
    }
    return;
}
add_action('woocommerce_前加_至购物车表格','tmy_eventbooking',20);
功能tmy_eventbooking(){
如果(!empty(get_field('datum')){//如果自定义字段不是空的…
echo'

Findet statt am:'。获取字段(“数据”)。

; } 如果(!empty(get_field('datum_ende')){//如果自定义字段不是空的… echo“

Bis:”。获取字段(“数据”)。

; } 如果(!empty(get_字段('veranstaltungsort')){//如果自定义字段不为空… echo“

Ort:”。获取字段('veranstaltungsort')。

; } 返回; }
这个很好用

现在,我希望能够按照这些ACF字段(键入
date
text
)对产品进行排序

例如,如果用户单击“日期”按钮或从下拉菜单中选择位置,则所有事件都会相应地排序。活动是常规的
WooCommerce
服务产品


什么是实现这一点的好方法?

您需要使用两个过滤器挂钩在归档页面中基于ACF执行自定义排序

使用
woocommerce\u catalog\u orderby
filter钩子添加自定义
date
位置
选项

使用
woocommerce\u get\u catalog\u ordering\u args
filter hook进行修改
orderby
order
基于您选择的选项

有用的链接


您想在哪个页面上对产品进行排序?在“产品档案”中,所有产品都会显示在其中。您是如何添加下拉列表的?下拉列表是您在每个“产品档案”或“类别”(等等)页面上获得的默认菜单。我没有改变任何事情。编辑:我删除了该图像,因为它可能会产生误导。我想说的是,我正在尝试通过ACF为用户实现排序,以便他们可以按日期或位置对产品进行排序。是的,但您必须首先将日期和位置选项添加到下拉列表中。谢谢!我在下拉菜单中有按日期和位置排序的选项。但是当我点击它们时,我没有得到正确的搜索结果。对于测试,我有一个填写了ACF的产品。但我在搜索结果中看到了所有产品。这取决于您在ACF中存储的值的类型。它们的位置为“text”,日期为“time/date”。
// Add these date and location sorting options on the frontend.
function add_new_custom_postmeta_orderby( $sortby ) {
    $sortby['date']     = __( 'Sort by date', 'woocommerce' );
    $sortby['location'] = __( 'Sort by location', 'woocommerce' );
    return $sortby;
}
add_filter( 'woocommerce_catalog_orderby', 'add_new_custom_postmeta_orderby' );
function add_custom_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 ) {
        case 'date':
            $sort_args['orderby']  = 'meta_value_num';
            $sort_args['order']    = 'desc';
            $sort_args['meta_key'] = 'date';
            break;

        case 'location':
            $sort_args['orderby']  = 'meta_value';
            $sort_args['order']    = 'asc';
            $sort_args['meta_key'] = 'location';
            break;
    }
    return $sort_args;
}
add_filter( 'woocommerce_get_catalog_ordering_args', 'add_custom_postmeta_ordering_args' );