如何在管理中按后期格式进行过滤?

时间:2011-08-16 作者:Steffi

我需要在管理中按帖子格式筛选帖子?

我该怎么做?

目前,Wordpress允许按类别和日期进行筛选。

4 个回复
最合适的回答,由SO网友:Bainternet 整理而成

试试我制作的这个插件:

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

SO网友:t31os

实际上,我已经在为您开发一个解决方案,只是需要重写代码的几个部分(因为我基于我编写的另一个插件,它也有相同的功能,但用于基于层次类型的页面模板)。

这比Bainernet的插件要大一点,所以如果你对它满意,一定要坚持他的解决方案(我只是说不要觉得有义务切换),无论如何我都会把它贴出来,为了所有感兴趣的人。它适用于任何支持post格式的post类型。

Edit/Update: 决定我也可以将代码放入一个合适的插件中,也可以将页面模板过滤器添加到分层帖子类型(支持页面模板)中。以下链接供感兴趣的人使用

SO网友:nderambure

函数中的一个小错误修复,将下拉选择保持为实际的post格式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\' );

SO网友:Shaun Cockerill

自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\',
        ) );
    }
} );
另一种方法是将post格式显示为自己的列。下面的代码将显示一个链接,该链接将过滤列表,尽管我在对该列进行排序时遇到问题,因为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 ) ?: \'standard\';
            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(), 在筛选帖子时,似乎以相同的方式工作。

EDIT: get_post_format 如果有错误或未选择格式,将返回false。在这种情况下,可以安全地假定“标准”为所选格式。我已经包括了一个“标准”的回退,当get_post_format() 返回false。

结束

相关推荐

WP-ADMIN正在重定向回主页(本地主机)

我在本地主机上安装了WordPress。直到今天,一切都很顺利。但今天当我进去的时候http://localhost/wp-admin 在访问管理面板的url中,它重定向回主页。我无法访问管理面板。以前从未发生过,每当我尝试访问管理面板时,它都会发生。请大家帮帮我。。。。非常感谢。