it-swarm.com.de

Benutzerdefinierte Spalte sortierbar machen

Ich habe einem benutzerdefinierten Beitragstyp eine benutzerdefinierte Spalte hinzugefügt, die problemlos funktioniert. Ich möchte nur, dass es die Namen nach Titel wund macht.

function sortable_custom_columns( $columns ) {
    $columns['custom_column'] = 'title';
    return $columns;
}
add_filter( 'manage_edit-custom_sortable_columns', 'sortable_custom_columns' );

Dies führt jedoch zu einer sehr zufälligen Sortierung. Ich denke, es kann mit dem Inhalt der Spalte zu tun haben? Was ich so rendere;

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

Macht das Sinn? Irgendwelche Gedanken hier? Vielen Dank

2
thatryan

Stellen Sie sicher, dass MY_POST_TYPE, MY_CUSTOM_COLUMN und MY_META_KEY auf die tatsächlichen Werte geändert werden.

Fügen Sie zunächst Ihre benutzerdefinierte Spalte hinzu. Deaktivieren Sie das Datum und stellen Sie es erneut ein, damit es in der letzten Spalte bleibt. Sie können diesen Schritt überspringen.

<?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;
}
?>

Zweitens können Sie Ihre Spalte mit dem manage_edit-{$post_type}_sortable_columns-Filter sortieren (noch nicht dokumentiert).

<?php
function my_set_sortable_columns( $columns )
{
    $columns['MY_CUSTOM_COLUMN'] = 'MY_CUSTOM_COLUMN';
    return $columns;
}
?>

Füllen Sie drittens die Spaltenzellen aus.

<?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;
    }
}
?>

Jetzt können Sie diese Spalte sortieren.

Hinweis: Wenn Sie meta_query nicht auf leere (nicht vorhandene) Werte prüfen, zeigt Ihre Spalte nur Beiträge mit (nicht leeren) Metawerten an, bis sie standardmäßig nach anderen oder nach anderen Spalten sortiert werden

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

Und jetzt wenden wir Filter und Aktionen an. Überprüfen Sie, ob Sie nicht im Frontend sind, auf der rechten Seite und der richtigen Beitragstyp ausgewählt ist:

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

?>
4
Max Yudin