建站教程

建站教程

Products

当前位置:首页 > 建站教程 >

媒体库中的数据按照文章类别过滤(WordPress媒体库完整指南及小技巧)

GG网络技术分享 2025-03-18 16:14 81


媒体库中的数据按照文章类别过滤

个人喜欢折腾,这里面的功能完全可以通过插件来解决,而且更加强大,但是我个人方面仅仅是希望添加一个每天按照分类筛选的功能,经过寻找,确实是找到了相关代码,测试过后也没有任何问题。

这里直接附上代码:

add_action('pre_get_posts', 'my_filter_media_by_cat');

add_action( 'restrict_manage_posts', 'my_add_media_cat_dropdown' );

function my_filter_media_by_cat( $q ) {

$scr = get_current_screen();

$cat = filter_input(INPUT_GET, 'postcat', FILTER_SANITIZE_STRING );

if ( ! $q->is_main_query() || ! is_admin() || (int)$cat <= 0 || $scr->base !== 'upload' )

return;

// get the posts

$posts = get_posts( 'nopaging=1&category=' . $cat );

// get post ids

$pids = ( ! empty( $posts ) ) ? wp_list_pluck($posts, 'ID') : false;

if ( ! empty($pids) ) {

$pidstxt = implode($pids, ',');

global $wpdb;

// get the ids of media having retrieved posts as parent

$mids = $wpdb->get_col("SELECT ID FROM $wpdb->posts WHERE post_parent IN ($pidstxt)");

if ( ! empty($mids) ) {

// force media query to retrieve only media having retrieved posts as parent

$q->set( 'post__in', $mids );

} else {

// force media query to return no posts

$q->set( 'p', -1 ); // let query found nothing

}

}

}

function my_add_media_cat_dropdown() {

$scr = get_current_screen();

if ( $scr->base !== 'upload' ) return;

$cat = filter_input(INPUT_GET, 'postcat', FILTER_SANITIZE_STRING );

$selected = (int)$cat > 0 ? $cat : '-1';

$args = array(

'show_option_none' => 'All Post Categories',

'name' => 'postcat',

'selected' => $selected

);

wp_dropdown_categories( $args );

}

代码逻辑方面备注也是相当清楚了,大家有兴趣的可以看看。

如果你觉得上面的代码比较复杂的话。可以考虑下面的插件:

https://wordpress.org/plugins/media-library-organizer/

WordPress媒体库完整指南及小技巧

WordPress媒体档案

所有这些hack的完整代码都可以作为公共Gist中的插件获得,我们已经通过本节链接到了它。您可以将其下载为.zip 文件并将其上传到您的WordPress网站以实施所有这四种技巧,而无需手动编辑您的文件。

标签:

提交需求或反馈

Demand feedback