web-dev-qa-db-fra.com

Comment filtrer par post-format dans admin?

J'ai besoin de filtrer mes posts par Post-Formats dans admin?

Comment puis je faire ça ?

Pour l'instant, Wordpress permet de filtrer par catégories et par dates.

7
Steffi

Essayez ce plugin que j'ai concocté:

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

En fait, je travaillais déjà sur une solution pour vous, je venais de réécrire plusieurs parties du code (car je me suis basé sur un autre plugin, j’écrivais de la même manière mais pour les modèles de page sur les types hiérarchiques).

C'est un peu plus gros que le plugin de Bainternet, donc tenez-vous-en à sa solution si vous en êtes satisfait (ne vous sentez pas obligé de changer, c'est tout ce que je dis), je vais quand même le publier, dans l'intérêt de tous ceux qui pourraient être intéressés. Cela fonctionnera pour tout type de publication prenant en charge les formats de publication.

Edition/Mise à jour: J'ai décidé de placer le code dans un plugin approprié, mais a également procédé de la même manière pour ajouter un filtre de modèle de page aux types de publication hiérarchique (prenant en charge les modèles de page.) intéressé,

J'espère que c'est utile .. :)

2
t31os

Une petite correction de bogue, pour garder la sélection déroulante au format de message réel, dans la fonction 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' );
1
nderambure

Depuis WordPress 4.3, la fonction column_title() inclura le format du message sous forme d’icône à côté du titre du message. En cliquant sur cette icône, la liste actuelle sera automatiquement filtrée au format de publication sélectionné.

La ou les réponses acceptées continueront de fonctionner et d'afficher la liste déroulante. Toutefois, elles peuvent être simplifiées, car nous n'avons pas besoin de filtrer la requête ultérieurement si nous utilisons les mêmes variables de requête.

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

Une autre méthode consiste à afficher le format de publication dans sa propre colonne. Le code suivant affichera un lien qui filtrera la liste, bien que des problèmes me empêchent de rendre cette colonne triable, car WordPress n'inclut aucune requête fiscale lorsque tous les formats sont affichés.

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

La version abrégée du format, fournie par get_post_format(), et la version longue générée par wp_dropdown_categories(), semblent fonctionner de la même manière lors du filtrage des publications.

0
Shaun Cockerill