Sortieren von benutzerdefinierten Spalten in WordPress-Admin-Seiten

Lesezeit: 4 Minuten

Benutzer-Avatar
John Mc Murray

Ich versuche, eine benutzerdefinierte Spalte im Admin-Bearbeitungsbildschirm zu sortieren. Die Spalte enthält einen ganzzahligen Wert (Stimmenzählung).

Um die Spalte zu generieren, verwende ich diesen “Standard” -Code:

add_filter( 'manage_edit-entries_sortable_columns', 'cutify_entries_columns_sortable' );
function cutify_entries_columns_sortable( $columns ) 
{
    $columns['entry_vote_count'] = 'entry_vote_count';
    return $columns;
}

add_filter( 'manage_entries_posts_columns', 'cutify_entries_columns_head' );
function cutify_entries_columns_head($defaults) 
{
    unset( $defaults['date'] );
    $defaults['entry_vote_count'] = 'Votes';
    return $defaults;
}

add_action('manage_entries_posts_custom_column', 'cutify_entries_columns_content', 10, 2);
function cutify_entries_columns_content($column_name, $post_ID) 
{
    if ($column_name == 'entry_vote_count') 
    {
        $number = rand(1,1000);

        print intVal($number);
    }
}

Das Problem versucht, diese Spalte zu sortieren. Ich habe hier und auf anderen Seiten viele Antworten gelesen und weiß, wie man dies sortiert, wenn der Wert von post_meta stammt, aber wie Sie sehen können, stammt der Wert in diesem Fall von einem Rückgabewert eines Funktionsaufrufs.

Gibt es eine Möglichkeit, eine benutzerdefinierte Spalte zu sortieren, die nicht auf einem post_meta-Wert basiert?

  • Verwenden Sie diese fantastischen Plugins wordpress.org/plugins/codepress-admin-columns

    – Anand Choudhary

    10. Mai 2018 um 6:16 Uhr

  • Können Sie Ihre Frage aktualisieren und den Code von einfügen cutify-votes/classes/class.API.php? Oder Sie können es auf Pastebin.com posten und den Link zum Einfügen zu Ihrer Frage hinzufügen.

    – Sally CJ

    13. Mai 2018 um 11:15 Uhr

  • Danke Sally CJ, aber der Code in der Klasse ist nicht relevant. Relevant ist, dass es sich um einen ganzzahligen Wert handelt, der zurückgegeben wird. Ich habe mein Codebeispiel oben aktualisiert, um ein zufälliges int statt eines Funktionsaufrufs zu verwenden.

    – John Mc Murray

    17. Mai 2018 um 10:13 Uhr

  • Entschuldigung, aber sind Sie sicher, dass class “ist nicht relevant”? Ich meine, es muss eine Methode geben/function in dem class die die Stimmenzahl für bestimmte Beiträge speichert/aktualisiert, richtig? Auch wenn die Anzahl der Stimmen nicht in der Metatabelle der Beiträge gespeichert wird.

    – Sally CJ

    18. Mai 2018 um 4:32 Uhr

  • @JohnMcMurray Sie verwenden die Randfunktion und generieren jedes Mal eine neue Nummer. Wenn Sie also versuchen, die Spaltenrandfunktion zu sortieren, generieren Sie eine neue Nummer, sodass Sie kein perfektes Ergebnis erhalten, sodass Sie einen eindeutigen Post-Voting-Wert in Post-Meta speichern müssen, dann wird es funktionieren fein.

    – Mukesh Panchal

    18. Mai 2018 um 6:29 Uhr

Benutzer-Avatar
Anand Choudhary

Spalten registrieren Als Erstes müssen Sie eine Spalte registrieren

<?php 
add_action( 'manage_cake_posts_custom_column', 'my_cake_column_content', 10, 2 );
function my_cake_column_content( $column_name, $post_id ) {
    if ( 'slices' != $column_name )
        return;
    //Get number of slices from post meta
    $slices = get_post_meta($post_id, 'slices', true);
    echo intval($slices);
} ?>

Machen Sie eine Spalte sortierbar

<?php 
 add_filter( 'manage_edit-cake_sortable_columns', 
 'my_sortable_cake_column' );
 function my_sortable_cake_column( $columns ) {
 $columns['slices'] = 'slice';

  //To make a column 'un-sortable' remove it from the array
  //unset($columns['date']);

   return $columns;
   } ?>

  • Danke Anand, aber mein Code macht das bereits und ich erwähne, dass ich den Wert von post_meta nicht bekomme …

    – John Mc Murray

    10. Mai 2018 um 7:43 Uhr


  • Hi Anand, Stack Snippets sind nur für JS/HTML/CSS, bitte überprüfe: Ausführbare Code-Snippets in Fragen und Antworten

    – Brasilo

    15. Mai 2018 um 15:08 Uhr

Der einfachste Weg, wenn Sie kein Plugin entwickeln, besteht darin, ein vorhandenes zu verwenden, z Admin-Spalten weil es Ihnen ermöglicht, mehrere erweiterte Aktionen auszuführen: Bestellungen, Hinzufügen von Spalten, …

  • Danke, aber ich kann dafür kein Plugin verwenden. Die Spalte erhält ihre Daten nicht aus einem Metafeld, sondern einen ganzzahligen Rückgabewert aus einem Funktionsaufruf. Alle diese Plugins hängen von eingebauten WordPress-Daten (Postmeta usw.) ab, und das habe ich nicht

    – John Mc Murray

    17. Mai 2018 um 10:08 Uhr

Benutzer-Avatar
Themenfa

Sie müssen benutzerdefinierte hinzufügen query_orderby zu WP_Query wenn wp versucht, Posts nach Ihrer benutzerdefinierten Spalte zu ordnen. so was:

add_action( 'pre_get_posts', 'my_entry_vote_orderby' );
function my_entry_vote_orderby( $query ) {
    global $wpdb;

    // Only filter in the admin
    if( ! is_admin() )
        return;

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

    // Only filter if orderby is set to 'entry_vote_count'
    if( 'entry_vote_count' == $orderby ) {
        // We need the order - default is ASC
        $order = isset( $query->query_vars ) && isset( $query->query_vars[ 'order' ] ) && strcasecmp( $query->query_vars[ 'order' ], 'desc' ) == 0 ? 'DESC' : 'ASC';

        // Order the posts by vote count
        $query->query_orderby = "ORDER BY ( SELECT vote_count FROM {$wpdb->posts} posts WHERE posts.post_type="post" AND posts.post_status="publish" ) {$order}";
    }
}

1371690cookie-checkSortieren von benutzerdefinierten Spalten in WordPress-Admin-Seiten

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy