Wie filtere ich nach dem Post-Format in Admin?


7

Ich muss meine Beiträge nach Postformaten in admin filtern.

Wie kann ich das machen ?

Derzeit ermöglicht Wordpress das Filtern nach Kategorien und Daten.

Antworten:


8

Versuchen Sie dieses Plugin, das ich erfunden habe:

<?php
! defined( 'ABSPATH' ) AND exit;
/**
 * Plugin Name: (#26032) WP_List_Table Post Format filter extension
 * Plugin URI:  http://wordpress.stackexchange.com/questions/26032/how-to-filter-by-post-format-in-admin
 * Description: Filters the admin WP_List_Table by post format
 * Author:      Bainternet
 * Author URI: http://en.bainternet.info
 */


function wpse26032_admin_posts_filter( &$query )
{
    if ( 
        is_admin() 
        AND 'edit.php' === $GLOBALS['pagenow']
        AND isset( $_GET['p_format'] )
        AND '-1' != $_GET['p_format']
        )
    {
        $query->query_vars['tax_query'] = array( array(
             'taxonomy' => 'post_format'
            ,'field'    => 'ID'
            ,'terms'    => array( $_GET['p_format'] )
        ) );
    }
}
add_filter( 'parse_query', 'wpse26032_admin_posts_filter' );

function wpse26032_restrict_manage_posts_format()
{
    wp_dropdown_categories( array(
         'taxonomy'         => 'post_format'
        ,'hide_empty'       => 0
        ,'name'             => 'p_format'
        ,'show_option_none' => 'Select Post Format'
    ) );
}
add_action( 'restrict_manage_posts', 'wpse26032_restrict_manage_posts_format' );

Ja! Vielen Dank ! Es funktioniert perfekt, außer wenn ich kein Post-Format wähle, gibt es mir nichts zurück. Beispiel: Eine Kategorie + kein Post-Format = NICHTS
Steffi

Nur eine Anmerkung, Sie können tatsächlich direkt nach Postformaten abfragen, indem Sie &post_format=asideder URL ein Beispiel hinzufügen ... Allerdings !!! .. es funktioniert nicht ganz richtig und generiert Hinweise / Warnungen, von denen ich nur annehmen kann, dass es sich um einen Fehler handelt, da es auch andere Nebenwirkungen hat (Sie werden sehen, was ich meine, wenn Sie es testen).
t31os

@Steffi: Entschuldigung, ich habe es behoben (glaube ich) und den Code aktualisiert.
Bainternet

Wenn Sie ein paar Probleme hatten, den Filter selbst zum Laufen zu bringen, können Sie möglicherweise einen Fix in meinem Code finden (eine Sache hat mich speziell für eine Weile im Kreis
laufen lassen

@ t31os, behoben und getestet, Code aktualisiert.
Bainternet

2

Ich habe tatsächlich bereits an einer Lösung für Sie gearbeitet, musste nur einige Teile des Codes neu schreiben (weil ich es auf einem anderen Plugin basiert habe, das ich geschrieben habe und das dasselbe tut, aber für Seitenvorlagen auf hierarchischen Typen).

Dies ist etwas größer als das Plugin von Bainternet. Halten Sie sich also auf jeden Fall an seine Lösung, wenn Sie damit zufrieden sind (fühlen Sie sich nicht verpflichtet zu wechseln, ist alles, was ich sage). Ich werde es trotzdem veröffentlichen. für alle, die interessiert sein könnten. Es funktioniert für jeden Beitragstyp, der Beitragsformate unterstützt.

Bearbeiten / Aktualisieren: Ich habe beschlossen, den Code auch in ein geeignetes Plugin einzufügen. Das Gleiche gilt auch für das Hinzufügen eines Seitenvorlagenfilters zu hierarchischen Beitragstypen (die Seitenvorlagen unterstützen). Unten verlinkt für alle Interessierten,

Hoffe das ist hilfreich .. :)


HINWEIS: Wenn ich etwas verpasst / übersehen habe, schreibe einen Kommentar auf die Antwort.
t31os

1

Ein kleiner Bugfix, um die Dropdown-Auswahl auf dem tatsächlichen Post-Format zu halten, in der Funktion wpse26032_restrict_manage_posts_format :

function wpse26032_restrict_manage_posts_format()
{

    $post_format_ID = ( isset( $_GET['p_format'] ) && $_GET['p_format'] != '' ) ? $_GET['p_format'] : -1;

    wp_dropdown_categories( array(
         'taxonomy'         => 'post_format'
        ,'hide_empty'       => 0
        ,'name'             => 'p_format'
        ,'show_option_none' => 'Select Post Format'
        ,'selected'         => $post_format_ID
    ) );
}
add_action( 'restrict_manage_posts', 'wpse26032_restrict_manage_posts_format' );

0

Seit WordPress 4.3 enthält die Funktion column_title()das Post-Format als Symbol neben dem Post-Titel. Durch Klicken auf dieses Symbol wird die aktuelle Liste automatisch nach dem ausgewählten Beitragsformat gefiltert.

Die akzeptierten Antworten funktionieren weiterhin und zeigen die Dropdown-Liste an. Sie können jedoch vereinfacht werden, da wir die Abfrage anschließend nicht filtern müssen, wenn wir dieselben Abfragevariablen verwenden.

add_action( 'restrict_manage_posts', function( $post_type = "" ) {
    if ( in_array( $post_type, array( 'post' ) ) ) {
        wp_dropdown_categories( array(
            'taxonomy'          => 'post_format',
            'hide_empty'        => 0,
            'name'              => 'post_format', // Do not need to use a custom variable name.
            'show_option_all'   => 'Select Post Format', // Use 'show_option_all' instead of 'show_option_none' as the default choice.
            'value_field'       => 'slug',
        ) );
    }
} );

Eine alternative Methode besteht darin, das Post-Format als eigene Spalte anzuzeigen. Der folgende Code zeigt einen Link an, der die Liste filtert, obwohl ich Probleme habe, diese Spalte sortierbar zu machen, da WordPress keine Steuerabfragen enthält, wenn alle Formate angezeigt werden.

// Add post format column.
add_action( 'manage_posts_columns', function( $columns ) {
    $screen = get_current_screen();
    if ( isset( $screen->post_type ) && in_array( $screen->post_type, array( 'post' ) ) ) {
        $columns['post_format'] = _( 'Post Format' );
    }
    return $columns;
} );

// Output post format in column.
add_action( 'manage_posts_custom_column' , function( $column, $post_id ) {
    switch( $column ) {
        case 'post_format':
            $format = get_post_format( $post_id );
            echo sprintf( '<a href="%s">%s</a>',
                add_query_arg( array( 'post_format' => $format ) ),
                __( ucfirst( $format ) ) );
            break;
    }
}, 10, 2 );

Sowohl die Kurzversion des Formats, wie von bereitgestellt get_post_format(), als auch die Langversion , die von ausgegeben wird wp_dropdown_categories(), scheinen beim Filtern von Posts auf dieselbe Weise zu funktionieren.


get_post_format()Gibt leer zurück, wenn das Standard-Postformat "Standard" ausgewählt ist. Sie können nach dieser Funktion auch eine Prüfung hinzufügen, damit in der Spalte gegebenenfalls "Standard" angezeigt wird. if ( empty( $format ) ) { $format = 'standard'; }
Terri Ann
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.