自动按元键对wp-admin帖子列表进行排序

时间:2013-02-02 作者:Eckstein

我在我的函数文件中使用以下代码来隐藏一些自定义列,并将其添加到wp admin中的后期编辑屏幕中。

我现在正试图让帖子列表按帖子元字段(姓氏)排序。我已经阅读了很多关于如何做到这一点的教程,但我找不到任何与我所拥有的相匹配的东西。

我不需要对列进行排序,我只想让列表按照自定义的元键自动排序。而且,仅供参考,我没有使用自定义的帖子类型。这只是常规的帖子类型。

有人能告诉我怎么做吗?

    //Add a First and Last Name column to the post edit table
function topo_modify_post_table( $column ) {
    $column[\'first_name\'] = \'First Name\';
    $column[\'last_name\'] = \'Last Name\';

    return $column;
}
add_filter( \'manage_posts_columns\', \'topo_modify_post_table\' );


function topo_modify_post_table_row( $column_name, $post_id ) {

    $custom_fields = get_post_custom( $post_id );

    switch ($column_name) {
        case \'first_name\' :
            ?><a style="font-weight:bold;" href="<?php echo admin_url(); ?>post.php?post=<? echo get_the_ID(); ?>&action=edit"><?php the_field(\'actor-first-name\'); ?></a><?php
            break;
        case \'last_name\' : ?>
            <a style="font-weight:bold;" href="<?php echo admin_url(); ?>post.php?post=<? echo get_the_ID(); ?>&action=edit"><?php the_field(\'actor-last-name\'); ?></a><?php
            break;

        default:
    }
}

add_filter( \'manage_posts_custom_column\', \'topo_modify_post_table_row\', 10, 2 );




//Remove columns
add_filter(\'manage_post_posts_columns\', \'ST4_columns_remove_category\');

// REMOVE DEFAULT COLUMNS
function ST4_columns_remove_category($defaults) {
    // to get defaults column names:
    // print_r($defaults);
    unset($defaults[\'comments\']);
    unset($defaults[\'date\']);
    unset($defaults[\'author\']);
    unset($defaults[\'title\']);
    return $defaults;
}

2 个回复
最合适的回答,由SO网友:Milo 整理而成

像这样的方法应该会奏效:

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

SO网友:Husky

而不是依赖$_GET 变量orderby 值也传递到$query 类本身。所以你也可以这样写:

add_action(\'pre_get_posts\', function($query) {
    if ($query->query[\'orderby\'] == "actor-last-name") {
        $query->set(\'meta_key\', \'actor-last-name\');
        $query->set(\'orderby\', \'meta_value\');
    }
});

结束