web-dev-qa-db-ja.com

管理者でポストフォーマットでフィルタリングするには?

管理者の投稿フォーマットで投稿をフィルタリングする必要がありますか?

どうやってやるの ?

今のところ、Wordpressはカテゴリと日付でフィルタリングすることができます。

7
Steffi

私が作ったこのプラグインを試してください。

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

私は実際にあなたのための解決策に既に取り組んでいました、ちょうどコードのいくつかの部分を書き直さなければなりませんでした(私がそれを書いた別のプラグインからそれをベースにしたので。

これはBainternetのプラグインより少し大きいので、もしあなたがそれに満足していれば必ず彼の解決策に固執してください(切り替えの義務を負わないでください)、とにかく投稿するつもりです、興味があるかもしれない人のために。投稿フォーマットをサポートするすべての投稿タイプで機能します。

編集/更新: 私は同様に適切なプラグインにコードを入れるかもしれないと決めました、また階層型投稿タイプにページテンプレートフィルタを追加するために同じことをしました。興味のある人のために以下にリンク、

それが役立つことを願っています.. :)

2
t31os

関数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

WordPress 4.3以降、関数column_title()は投稿のタイトルの横にアイコンとして投稿のフォーマットを含めます。このアイコンをクリックすると、現在のリストが選択した投稿フォーマットに自動的に絞り込まれます。

承認された回答は引き続き機能し、ドロップダウンを表示しますが、同じクエリ変数を使用する場合は後でクエリをフィルタ処理する必要がないため、単純化することができます。

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

別の方法は、投稿フォーマットを独自の列として表示することです。次のコードはリストをフィルタリングするリンクを表示しますが、WordPressがすべてのフォーマットが表示されているときに税の問い合わせが含まれていないため、この列をソート可能にする問題があります。

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

get_post_format()によって提供される形式の短いバージョンと、wp_dropdown_categories()によって出力される長いバージョンの両方は、投稿をフィルタリングするときに同じように動作するように見えます。

0
Shaun Cockerill