Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/wordpress/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wordpress:按自定义帖子类型的列进行默认排序_Wordpress_Sorting - Fatal编程技术网

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

Wordpress:按自定义帖子类型的列进行默认排序,wordpress,sorting,Wordpress,Sorting,我有一个名为Contact的自定义post类型,带有诸如名字、姓氏、电话号码等自定义字段 在管理部分,我认为它们是按时间顺序排序的,但我需要它们默认按姓氏排序 我已经阅读了这里的所有其他解决方案,但没有一个有效,包括: function set_post_order_in_admin( $wp_query ) { global $pagenow; if ( is_admin() && 'edit.php' == $pagenow && !isset($_GET

我有一个名为Contact的自定义post类型,带有诸如名字、姓氏、电话号码等自定义字段

在管理部分,我认为它们是按时间顺序排序的,但我需要它们默认按姓氏排序

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

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似乎会改变为逆时间顺序

我做错了什么?

替换

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

它可能有助于参考以下解决方案

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' );

或者参考此

我是一名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;

        });
    }
}

从该答案复制的函数:

此代码段将'Name'列设置为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' );

同样的事情也发生在我身上。如果你的条件不对。删除ifs后,请先尝试执行此操作。@Junaid请查看此操作。我以前错过了这个,但感谢上帝,我现在试过了。对于自定义的帖子类型,请替换
!isset($\u GET['post\u type'])
@$\u GET['post\u type']='my\u custom\u type'
(或类似的东西)设置,并且要按
菜单顺序进行排序(这是一个post属性而不是一个meta),去掉
'meta\u键'
行,使用
$query->set('orderby',menu order')。虽然您的代码可以工作,但它不能回答问题
 return $this->sortArrayByKey($posts, "surname");
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' );