Wordpress:按自定义帖子类型的列默认排序

时间:2016-08-02 13:11:32

标签: wordpress sorting

我有一个名为“联系人”的自定义帖子类型,其中包含姓名,姓氏,电话号码等自定义字段。

在管理部分,我们按时间顺序对它们进行了排序,但是我需要默认按姓氏排序。

我已经在这里阅读了所有其他解决方案,但没有一个能够奏效,包括:

function set_post_order_in_admin( $wp_query ) {
global $pagenow;
  if ( is_admin() && 'edit.php' == $pagenow && !isset($_GET['orderby'])) {
    $wp_query->set( 'orderby', 'surname' );
    $wp_query->set( 'order', 'ASC' );
  }
}
add_filter('pre_get_posts', 'set_post_order_in_admin' );

但无论我尝试排序的哪个领域,都没有任何变化,除了切换ASC / DESC似乎改变为反向按时间顺序排列。

我做错了什么?

4 个答案:

答案 0 :(得分:8)

参考以下解决方案,

function wpa84258_admin_posts_sort_last_name( $query ){
    global $pagenow;
    if( is_admin()
        && 'edit.php' == $pagenow
        && !isset( $_GET['orderby'] )
        && !isset( $_GET['post_type'] ) ){
            $query->set( 'meta_key', 'last_name' );
            $query->set( 'orderby', 'meta_value' );
            $query->set( 'order', 'ASC' );
    }
}
add_action( 'pre_get_posts', 'wpa84258_admin_posts_sort_last_name' );

或参考此EditProfileButton_Click

答案 1 :(得分:4)

替换

 $wp_query->set( 'orderby', 'surname' );
 $wp_query->set( 'order', 'ASC' );

$query->set( 'meta_key', 'surname' ); // name of your post meta key
$query->set( 'orderby',  'meta_value'); // meta_value since it is a string

这可能会有所帮助

答案 2 :(得分:0)

我是一个drupal开发者,没有机会玩WordPress。 我们遇到了同样的问题,这就是我们修复它的方法。

获取自定义内容类型数据(WP默认api或自定义查询),它将是一个对象数组。使用以下功能对它们排序。返回排序的帖子数组。不确定,你需要在wordpress中实现这个钩子。

/**
 *  Function to sort array by key
 *  sortArrayByKey($yourArray,"name",true); //String sort (ascending order)
 *  sortArrayByKey($yourArray,"name",true,false); //String sort (descending order)
 *  sortArrayByKey($yourArray,"id"); //number sort (ascending order)
 *  sortArrayByKey($yourArray,"count",false,false); //number sort (descending order)
 */

function sortArrayByKey(&$array, $key, $string = false, $asc = true)
{
    if ($string) {
        usort($array, function ($a, $b) use (&$key, &$asc) {
            if ($asc) return strcmp(strtolower($a{$key}), strtolower($b{$key}));
            else        return strcmp(strtolower($b{$key}), strtolower($a{$key}));
        });
    } else {
        usort($array, function ($a, $b) use (&$key, &$asc) {
            if ($a[$key] == $b{$key}) {
                return 0;
            }
            if ($asc) return ($a{$key} < $b{$key}) ? -1 : 1;
            else     return ($a{$key} > $b{$key}) ? -1 : 1;

        });
    }
}

然后在你的钩子中,你可以通过

调用这个函数
 return $this->sortArrayByKey($posts, "surname");

从此答案复制的功能:https://stackoverflow.com/a/39872303/3086531

答案 3 :(得分:-1)

此代码段将 “名称”列设置为 Woocommerce 产品的默认排序顺序(升序)

function sort_woocommerce_products_by_name( $query ){
    global $pagenow;
    if( is_admin()
        && 'edit.php' == $pagenow
        && isset($_GET['post_type']) && $_GET['post_type']=='product'
        && !isset( $_GET['orderby'] ) ){
            $query->set( 'orderby', 'title' );
            $query->set( 'order', 'asc' );
    }
}
add_action( 'pre_get_posts', 'sort_woocommerce_products_by_name' );