创建附件时,请执行以下操作:
如果附件父ID用于具有排除的帖子类型的帖子,请不要执行任何操作。如果它不在排除的帖子类型列表中,请在隐藏的自定义分类中为其分配一个标记,例如。
function create_hidden_taxonomy() {
register_taxonomy(
\'hidden_taxonomy\',
\'attachment\',
array(
\'label\' => __( \'Hidden Attachment Taxonomy\' ),
\'public\' => false, // it\'s hidden!
\'rewrite\' => false,
\'hierarchical\' => false,
)
);
}
add_action( \'init\', \'create_hidden_taxonomy\' );
function tomjn_add_term( $post_id, \\WP_Post $p, $update ) {
if ( \'attachment\' !== $p->post_type ) {
return;
}
if ( wp_is_post_revision( $post_id ) ) {
return;
}
if ( $p->post_parent ) {
$excluded_types = array( \'example_post_type\', \'other_post_type\' );
if ( in_array( get_post_type( $p->post_parent ), $excluded_types ) ) {
return;
}
}
$result = wp_set_object_terms( $post_id, \'show_in_media_library\', \'hidden_taxonomy\', false );
if ( !is_array( $result ) || is_wp_error( $result ) ) {
wp_die( "Error setting up terms") ;
}
}
add_action( \'save_post\', \'tomjn_add_term\', 10, 3 );
现在,使用bravokeyls答案中的代码,而不是使用
post_parent__not_in
, 在隐藏的自定义分类中搜索标记:
/**
* Only show attachments tagged as show_in_media_library
**/
function assets_hide_media( \\WP_Query $query ){
if ( !is_admin() ) {
return;
}
global $pagenow;
if ( \'upload.php\' != $pagenow && \'media-upload.php\' != $pagenow ) {
return;
}
if ( $query->is_main_query() ) {
$query->set(\'hidden_taxonomy\', \'show_in_media_library\' );
}
return $query;
}
add_action( \'pre_get_posts\' , \'assets_hide_media\' );
这应该比使用
post_parent__not_in
, 并提供了一种分类法,可用于筛选其他内容
这给你留下了最后一个问题。附件只有在有此术语时才会显示,但是您已经上传的所有附件呢?我们需要回到过去,把这个词加上去。要做到这一点,您需要运行这样一段代码:
$q = new WP_Query( array(
\'post_type\' => \'attachment\',
\'post_status\' => \'any\',
\'nopaging\' => true,
) );
if ( $q->have_posts() ) {
global $post;
while ( $q->have_posts() ) {
$q->the_post();
$post_id = get_the_ID();
$excluded_types = array( \'example_post_type\', \'other_post_type\' );
if ( $post->post_parent ) {
if ( in_array( get_post_type( $post->post_parent ), $excluded_types ) ) {
echo "Skipping ".intval( $post_id )." ".esc_html( get_the_title() )."\\n";
continue;
}
}
echo "Setting term for ".intval( $post_id )." ".esc_html( get_the_title() )."\\n";
$result = wp_set_object_terms( $post_id, \'show_in_media_library\', \'hidden_taxonomy\', false );
if ( !is_array( $result ) || is_wp_error( $result ) ) {
echo "Error setting up terms";
}
}
wp_reset_postdata();
} else {
echo "No attachments found!\\n";
}
我建议将其作为WP-CLI命令运行,尤其是当您有许多附件需要处理时