如何按 WooCommerce
值对 Advanced Custom Field
产品进行排序?
我在网站的后端和前端添加了一些自定义字段。我的 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;
}
这很好用。
现在我希望能够通过这些 ACF 字段(类型 date
和 text
)对产品进行排序。
例如,如果用户单击“日期”按钮或从下拉菜单中选择位置,则所有事件都会相应地进行排序。事件是常规的 WooCommerce
服务产品。
解决这个问题的好方法是什么?
答案 0 :(得分:1)
您需要使用两个过滤器钩子在基于 ACF 的存档页面中执行自定义排序。
<块引用>使用 woocommerce_catalog_orderby
过滤器挂钩添加自定义 date
和 location
选项。
// 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' );
<块引用>
使用 woocommerce_get_catalog_ordering_args
过滤器钩子修改
orderby
和 order
基于您选择的选项
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' );
有用的链接