it-swarm.com.de

Sortieren Sie den Administrationsbereich nach benutzerdefiniertem Ereignisdatum

Hier gibt es mehrere Fragen zum Sortieren benutzerdefinierter Elemente im Administratorbereich. Ich kann jedoch nirgendwo eine bestimmte Antwort finden. Hier ist mein spezielles Problem:

Ich verwende MagicFields, um mehrere Felder zu erstellen, die sich auf Ereignisse beziehen (jeder Beitrag ist ein "Ereignis" oder ein Konzert). Eines dieser Felder ist das Ereignisdatum. Ich möchte 1) das Ereignisdatum im Admin-Ereignis-Schreibfeld als separate Spalte anzeigen und 2) diese Spalte automatisch aufsteigend sortieren. Bisher habe ich die Spalte registriert, angezeigt und als sortierbar registriert. Hier ist mein Code, der in die Datei functions.php eingefügt wird:

// Register a new column in the admin Post area
function event_date_column_register( $columns ) {
$columns['event_date'] = __( 'Event Date', 'my-plugin' );
return $columns;
}
add_filter('manage_edit-post_columns', 'event_date_column_register');

// Display the column content
function event_date_column_display( $column_name, $post_id ) {
if ( 'event_date' != $column_name )
    return;

$event_date = get('date_of_event');

echo $event_date;
}
add_action( 'manage_posts_custom_column', 'event_date_column_display', 10, 2 );


// Register the column as sortable
function event_date_column_register_sortable( $columns ) {
$columns['event_date'] = 'event_date';

return $columns;
}
add_filter( 'manage_edit-post_sortable_columns', 'event_date_column_register_sortable' );


function event_date_column_orderby( $vars ) {
if ( isset( $vars['orderby'] ) && 'event_date' == $vars['orderby'] ) {
    $vars = array_merge( $vars, array(
        'meta_key' => 'event_date',
        'orderby' => 'meta_value_num'
    ) );
}

return $vars;
}
add_filter( 'request', 'event_date_column_orderby' );

Daher werden "Ereignisse" im Post-Verwaltungsbereich angezeigt (siehe unten). Wenn ich jedoch versuche, nach diesem Feld zu sortieren, werden alle meine Posts ausgeblendet.

Bild hier

Ich weiß, dass ich mein Datum vor dem Sortieren auf die lange Unix-Zeit (strtotime();) umstellen muss, aber wo und wie? Entsprechend dem Kommentarthread hier (Suche nach "funktioniert wie ein Zauber") können Sie einige lange Abfragen schreiben, aber ich weiß nicht, ob es ist richtig, wo diese Abfrage eingefügt werden soll, oder irgendetwas anderes.

Ich bin ein Neuling - also vielen Dank im Voraus für die Hilfe und Entschuldigung, wenn ich nicht gründlich genug bin.

1
Jeremy

Sie müssen den Wert für orderby in meta_value in event_date_column_orderby ändern. Außerdem bin ich mir nicht sicher, welche get('event_date') Sie verwenden. Daher habe ich sie im folgenden Code durch get_post_meta ersetzt.

Ich habe gerade den folgenden Code getestet und er ist nach Datumsangaben sortiert.

// Register a new column in the admin Post area
function event_date_column_register( $columns ) {
$columns['event_date'] = __( 'Event Date', 'my-plugin' );
return $columns;
}
add_filter('manage_edit-post_columns', 'event_date_column_register');

// Display the column content
function event_date_column_display( $column_name, $post_id ) {
if ( 'event_date' != $column_name )
    return;

$event_date = get_post_meta( $post_id, 'event_date', true );
echo $event_date;
}
add_action( 'manage_posts_custom_column', 'event_date_column_display', 10, 2 );


// Register the column as sortable
function event_date_column_register_sortable( $columns ) {
$columns['event_date'] = 'event_date';

return $columns;
}
add_filter( 'manage_edit-post_sortable_columns', 'event_date_column_register_sortable' );


function event_date_column_orderby( $vars ) {
if ( isset( $vars['orderby'] ) && 'event_date' == $vars['orderby'] ) {
    $vars = array_merge( $vars, array(
        'meta_key' => 'event_date',
        'orderby' => 'meta_value'
    ) );
}

return $vars;
}
add_filter( 'request', 'event_date_column_orderby' );
5

Ist es möglich, die Reihenfolge der Ausgabe umzukehren? Ich habe es versucht:

        $vars = array_merge( $vars, array(
        'meta_key' => 'tf_events_startdate',
        'orderby' => 'meta_value',
    'order' => 'DESC'
    ) 

Aber kein glück.

1
bcorkins