我正在尝试更改woocommerce管理界面中的默认排序顺序。
我正在尝试以下代码,默认情况下按产品名称对产品页面进行排序。
/* Sort posts in wp_list_table by column in ascending or descending order. */
function custom_post_order($query){
/*
Set post types.
_builtin => true returns WordPress default post types.
_builtin => false returns custom registered post types.
*/
$post_types = get_post_types(array('_builtin' => false), 'names');
/* The current post type. */
$post_type = $query->get('post_type');
/* Check post types. */
if(in_array($post_type, $post_types) && $post_type == 'product'){
/* Post Column: e.g. title */
if($query->get('orderby') == ''){
$query->set('orderby', 'title');
}
/* Post Order: ASC / DESC */
if($query->get('order') == ''){
$query->set('order', 'ASC');
}
}
}
if(is_admin()){
add_action('pre_get_posts', 'custom_post_order');
}
但它似乎没有起作用。任何人都可以指出我出错的地方或者woocommerce处理产品列的方式不同。
提前致谢。
答案 0 :(得分:0)
我会改为定位parse_query
。这似乎对我有用:
/* Sort products in wp_list_table by column in ascending or descending order. */
function sp_41964737_custom_product_order( $query ){
global $typenow;
if( is_admin() && $query->is_main_query() && $typenow == 'product' ){
/* Post Column: e.g. title */
if($query->get('orderby') == ''){
$query->set('orderby', 'title');
}
/* Post Order: ASC / DESC */
if($query->get('order') == ''){
$query->set('order', 'ASC');
}
}
}
add_action( 'parse_query', 'sp_41964737_custom_product_order' );
结果: