Make custom column sortable

时间:2018-02-06 作者:thatryan

我在自定义帖子类型中添加了一个自定义列,效果很好。我只想按标题对名字进行排序,所以我尝试了这个,

function sortable_custom_columns( $columns ) {
    $columns[\'custom_column\'] = \'title\';
    return $columns;
}
add_filter( \'manage_edit-custom_sortable_columns\', \'sortable_custom_columns\' );
然而,这会返回非常随机的排序。我认为这可能与专栏的内容有关?我这样渲染;

function location_column_content( $column, $post_id ) {
    switch ( $column ) {
        case \'practice_name\':
            $location_post_meta = get_post_meta( $post_id );
            $practice_post_id = $location_post_meta[\'practice_id\'][0];
            echo \'<a href="\' . get_edit_post_link( $practice_post_id ) . \'">\' . get_the_title( $practice_post_id ) . \'</a>\';
            break;
    }

}
add_action( \'manage_sf-location_posts_custom_column\', \'location_column_content\', 10, 2 );
这有意义吗?有什么想法吗?非常感谢。

3 个回复
SO网友:Max Yudin

确保更改MY_POST_TYPE, MY_CUSTOM_COLUMNMY_META_KEY 实际值。

首先,添加自定义列。取消设置日期并再次设置以将其保留在最后一列中。您可以跳过此步骤。

<?php
function my_manage_MY_POST_TYPE_columns( $columns )
{
    // save date to the variable
    $date = $columns[\'date\'];
    // unset the \'date\' column
    unset( $columns[\'date\'] ); 
    // unset any column when necessary
    // unset( $columns[\'comments\'] );

    // add your column as new array element and give it table header text
    $columns[\'MY_CUSTOM_COLUMN\'] = __(\'Custom Column Header Text\');

    $columns[\'date\'] = $date; // set the \'date\' column again, after the custom column

    return $columns;
}
?>
其次,使用manage_edit-{$post_type}_sortable_columns 过滤器(尚未记录)。

<?php
function my_set_sortable_columns( $columns )
{
    $columns[\'MY_CUSTOM_COLUMN\'] = \'MY_CUSTOM_COLUMN\';
    return $columns;
}
?>
第三,填充列单元格。

<?php
function my_populate_custom_columns( $column, $post_id )
{
    switch ( $column ) {
        case \'MY_CUSTOM_COLUMN\':
            echo get_post_meta($post_id, \'MY_META_KEY\', true);
            break;
        case \'MAYBE_ANOTHER_CUSTOM_COLUMN\':
            // additional code
            break;
    }
}
?>
现在可以对该列进行实际排序了。

注意:如果不检查meta_query 对于空(不存在)值,您的列将仅显示具有(非空)元值的帖子,直到默认情况下按另一列或另一列排序为止

<?php
function my_sort_custom_column_query( $query )
{
    $orderby = $query->get( \'orderby\' );

    if ( \'MY_CUSTOM_COLUMN\' == $orderby ) {

        $meta_query = array(
            \'relation\' => \'OR\',
            array(
                \'key\' => \'MY_META_KEY\',
                \'compare\' => \'NOT EXISTS\', // see note above
            ),
            array(
                \'key\' => \'MY_META_KEY\',
            ),
        );

        $query->set( \'meta_query\', $meta_query );
        $query->set( \'orderby\', \'meta_value\' );
    }
}
?>
现在让我们应用过滤器和操作。检查您是否位于右侧页面的前端,并选择了正确的帖子类型:

<?php
global $pagenow;

if ( is_admin() && \'edit.php\' == $pagenow && \'MY_POST_TYPE\' == $_GET[\'post_type\'] ) {

    // manage colunms
    add_filter( \'manage_MY_POST_TYPE_posts_columns\', \'my_manage_MY_POST_TYPE_columns\' );

    // make columns sortable
    add_filter( \'manage_edit-MY_POST_TYPE_sortable_columns\', \'my_set_sortable_columns\' );

    // populate column cells
    add_action( \'manage_MY_POST_TYPE_posts_custom_column\', \'my_populate_custom_columns\', 10, 2 );

    // set query to sort
    add_action( \'pre_get_posts\', \'my_sort_custom_column_query\' );
}

?>

SO网友:Abdullah Mahi

Make Columns Sortable

默认情况下,新的自定义列不可排序,因此很难找到所需的数据。要对自定义列进行排序,WordPress有另一个过滤器manage\\u edit-post\\u sortable\\u列,您可以使用它来指定哪些列是可排序的。

运行此操作时,函数将传入当前可排序的所有列的参数,通过将新的自定义列添加到此列表,现在将使这些列可排序。您给出的值将在URL中使用,以便WordPress了解按哪个列排序。

下面是允许您按自定义列meta进行排序的步骤。

// Register the column as sortable
function register_sortable_columns( $columns ) {
    $columns[\'meta\'] = \'Custom Column\';
    return $columns;
}
add_filter( \'manage_edit-post_sortable_columns\', \'register_sortable_columns\' );

SO网友:Maxim Sarandi

您需要使用pre\\u get\\u posts对表进行排序。关于envato tips

结束

相关推荐

用于对用户进行排序的Sortby参数

因此,对于我的帖子列表,目前这些都是sortbypost_count.现在,我正在尝试按“最新”或“最近”对帖子进行排序下面是短代码的工作原理[sortby=post_count] 其他参数可从中找到Order & Orderby Parameters, 然而,我找不到“最新”的参数有什么建议吗?