gpt4 book ai didi

php - 在 Woocommerce 管理产品列表中使特色列可排序

转载 作者:行者123 更新时间:2023-12-04 04:00:04 24 4
gpt4 key购买 nike

在 WooCommerce 后端的产品列表中,我们可以通过点击星号使产品成为特色。

但是,如果您有很多产品并且之后想查看哪些产品有特色,我们必须搜索所有产品。

所以我想把这个栏目做成可排序的,以便在排序时所有特色产品都显示在前面或后面

使用我目前的代码,可以对列进行排序,但在排序过程中结果变为空,导致 0 个结果

// 'featured' column sortable on the 'product' page
function sc_sortable_column( $columns ) {
$columns['featured'] = 'featured';

return $columns;
}
add_filter( 'manage_edit-product_sortable_columns', 'sc_sortable_column' );


// Orderby 'featured' (product)
function filter_pre_get_posts( $query ) {
if( ! is_admin() )
return;

$orderby = $query->get('orderby');

// featured, product
if( $orderby == 'featured') {
$query->set( 'meta_key', '_featured' );
$query->set( 'orderby', 'meta_value_num' );
}
}
add_action( 'pre_get_posts', 'filter_pre_get_posts' );

最佳答案

自 WooCommerce 3 以来,特色产品现在由 product_visibility 自定义分类法处理 featured。请参阅:Get WooCommerce featured products in a WP_Query

通常分类法不允许对帖子进行排序,如 WordPress Development StackExchange 线程中所述:Using wp_query is it possible to orderby taxonomy? .

但例如使用过滤器 posts_clauses 可以按特色对产品进行排序。

因此要使用的代码将是:

// Make Product "Featured" column sortable on Admin products list
add_filter( 'manage_edit-product_sortable_columns', 'products_featured_sortable_column' );
function products_featured_sortable_column( $columns ) {
$columns['featured'] = 'featured';

return $columns;
}

add_filter('posts_clauses', 'orderby_product_visibility', 10, 2 );
function orderby_product_visibility( $clauses, $wp_query ) {
global $wpdb;

$taxonomy = 'product_visibility';
$term = 'featured';

if ( isset( $wp_query->query['orderby'] ) && $term == $wp_query->query['orderby'] ) {
$clauses['join'] .=<<<SQL
LEFT OUTER JOIN {$wpdb->term_relationships} ON {$wpdb->posts}.ID={$wpdb->term_relationships}.object_id
LEFT OUTER JOIN {$wpdb->term_taxonomy} USING (term_taxonomy_id)
LEFT OUTER JOIN {$wpdb->terms} USING (term_id)
SQL;
$clauses['where'] .= " AND (taxonomy = '{$taxonomy}' OR taxonomy IS NULL)";
$clauses['groupby'] = "object_id";
$clauses['orderby'] = "GROUP_CONCAT({$wpdb->terms}.name ORDER BY name ASC) ";
$clauses['orderby'] .= ( 'ASC' == strtoupper( $wp_query->get('order') ) ) ? 'ASC' : 'DESC';
}
return $clauses;
}

代码进入事件子主题(或事件主题)的 functions.php 文件。测试和工作。

关于php - 在 Woocommerce 管理产品列表中使特色列可排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63203760/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com