📜  使 posts_custom_column 可排序 (1)

📅  最后修改于: 2023-12-03 15:06:43.946000             🧑  作者: Mango

使 posts_custom_column 可排序

在 WordPress 中,我们经常需要在文章或页面列表中显示自定义列。例如,我们可能需要显示文章或页面的某些元数据,如作者、日期和标签。

使用 posts_custom_column 钩子,我们可以很容易地添加自定义列。然而,默认情况下,这些自定义列是不可排序的,这给用户带来了一些不便。

幸运的是,我们可以使用 manage_{$post_type}_posts_columnsmanage_{$post_type}_sortable_columns 这两个钩子来使这些自定义列可排序。

// 添加自定义列
add_filter( 'manage_post_posts_columns', 'my_custom_columns' );

function my_custom_columns( $columns ) {
    $columns['my_column'] = 'My Column';
    return $columns;
}

// 显示自定义列内容
add_action( 'manage_posts_custom_column', 'my_custom_column_content', 10, 2 );

function my_custom_column_content( $column, $post_id ) {
    if ( 'my_column' === $column ) {
        echo get_post_meta( $post_id, 'my_meta_key', true );
    }
}

// 使自定义列可排序
add_filter( 'manage_edit-post_sortable_columns', 'my_sortable_columns' );

function my_sortable_columns( $sortable_columns ) {
    $sortable_columns['my_column'] = 'my_column';
    return $sortable_columns;
}

// 处理排序
add_action( 'pre_get_posts', 'my_column_orderby' );

function my_column_orderby( $query ) {
    if ( ! is_admin() || ! $query->is_main_query() ) {
        return;
    }

    $orderby = $query->get( 'orderby' );
    if ( 'my_column' === $orderby ) {
        $query->set( 'meta_key', 'my_meta_key' );
        $query->set( 'orderby', 'meta_value' );
    }
}

在上面的代码中,我们首先使用 manage_post_posts_columns 钩子添加了一个名为 my_column 的自定义列。接下来,我们使用 manage_posts_custom_column 钩子显示自定义列的内容。

然后,我们使用 manage_edit-post_sortable_columns 钩子使自定义列可排序。最后,我们使用 pre_get_posts 钩子处理排序。在这个钩子中,我们首先判断是否在后台管理界面中,然后判断是否是主查询。接下来,我们检查是否按照 my_column 列进行排序。如果是,我们设置 meta_key 参数为我们要排序的 meta 键,将 orderby 参数设置为 meta_value,这样就可以按照元数据值进行排序了。

以上就是让 posts_custom_column 可排序的全部过程,现在用户可以在后台管理界面中按照自定义列进行排序了!