使自定义帖子列可排序

时间:2017-09-28 作者:Dan L

我有一个自定义列,列出了“帖子列表”屏幕中每个帖子的post\\u meta值。我只能找到有关如何使自定义帖子类型可排序的信息。如何使其可排序?提前谢谢。

add_filter(\'manage_posts_columns\' , \'ws_add_manufacturer_column\');
function ws_add_manufacturer_column($defaults){
    $defaults[\'manufacturer\'] = \'Manufacturer\';
    return $defaults;
}

add_action(\'manage_posts_custom_column\', \'ws_add_manufacturer_content\', 
10, 2);
function ws_add_manufacturer_content($column_name, $post_ID) {
    if ($column_name == \'manufacturer\') {
    $manufacturer_name = get_post_meta( $post_ID, \'wccaf_manufacturer\', 
true );
    if ($manufacturer_name) {
        echo $manufacturer_name;
    }
    }
}

1 个回复
SO网友:Mike

您需要两个附加功能。

第一个将列可排序挂钩到manage_edit-{post_type}_sortable_columns 滤器

function ws_sortable_manufacturer_column( $columns )    {
    $columns[\'manufacturer\'] = \'Manufacturer\';
    return $columns;
}
add_filter( \'manage_edit-post_sortable_columns\', \'ws_sortable_manufacturer_column\' );
第二个钩子pre_get_posts 要操作查询以按列排序。。。

function ws_orderby_custom_column( $query ) {
    global $pagenow;

    if ( ! is_admin() || \'edit.php\' != $pagenow || ! $query->is_main_query() || \'post\' != $query->get( \'post_type\' ) )  {
        return;
    }

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

    switch ( $orderby ) {
        case \'manufacturer\':
            $query->set( \'meta_key\', \'wccaf_manufacturer\' );
            $query->set( \'orderby\', \'meta_value\' );
            break;

        default:
            break;
    }

}
add_action( \'pre_get_posts\', \'ws_orderby_custom_column\' );
希望有帮助

结束

相关推荐

Columns in a "post"

我知道所有wordpress都是围绕某些关键的“实体”构建的。其中一些是,这一列表并非详尽无遗,因为我知道wordpress几乎没有其他关键的“实体”每个wordpress网站都有一个“主页”,当我更改任何“主题”设置时,就是这个“主页”反映了这些更改。例如,我可以将主页配置为具有“侧栏”+“内容”+“侧栏”或其任何变体。我想知道的是,如果我可以让我的“帖子”也使用列。因为我希望我的每一篇“帖子”都能在一个新页面中打开,并向浏览该网站的人展示3列。第一列包含一系列书签,这些书签被放在视频的不同部分,视频显