在管理面板内,在媒体中 - >图书馆,如何通过“搜索媒体”框中的文件名搜索媒体文件?
我知道文件名放在数据库的“GUID”列中,但我不知道在哪里可以找到负责媒体搜索的代码段,例如。 MySQL select
。
现在只搜索post_title
列。我也试图找到$_REQUEST['s']
,但没有结果。
答案 0 :(得分:11)
我在WordPress Developers #45153找到了一个解决方案,但这里都是Q& A的相关信息:
add_filter( 'posts_search', 'guid_search_so_14940004', 10, 2 );
function guid_search_so_14940004( $search, $a_wp_query )
{
global $wpdb, $pagenow;
// Only Admin side && Only Media Library page
if ( !is_admin() && 'upload.php' != $pagenow )
return $search;
// Original search string:
// AND (((wp_posts.post_title LIKE '%search-string%') OR (wp_posts.post_content LIKE '%search-string%')))
$search = str_replace(
'AND ((',
'AND (((' . $wpdb->prefix . 'posts.guid LIKE \'%' . $_GET['s'] . '%\') OR ',
$search
);
return $search;
}
有人建议我需要验证,但似乎很好:
将
$_GET['s']
更改为$a_wp_query->query_vars['s']
,以便在通过ajax POST调用搜索功能时也能正常工作,例如使用“创建图库”对话框时。
答案 1 :(得分:0)
快速更新此答案。上面的代码仅适用于“媒体库”选项页面,不适用于将图像插入内容区域时发生的任何Ajax请求。
add_filter( 'posts_search', 'guid_search_so_14940004', 10, 2 );
function guid_search_so_14940004( $search, $a_wp_query ) {
global $wpdb, $pagenow;
// Only Admin side && Only Media Library page
if ( ! is_admin() ) {
return $search;
}
if ( 'admin-ajax.php' !== $pagenow && 'upload.php' !== $pagenow ) {
return $search;
}
if ( isset( $_REQUEST['action'] ) && 'query-attachments' === $_REQUEST['action'] && ! empty( $_REQUEST['query']['s'] ) ) {
$search_string = $_REQUEST['query']['s'];
}
if ( isset( $_REQUEST['s'] ) || empty( $_REQUEST['s'] ) ) {
$search_string = $_REQUEST['s'];
}
if ( ! isset( $search_string ) || empty( $search_string ) ) {
return $search;
}
// Original search string:
// AND (((wp_posts.post_title LIKE '%search-string%') OR (wp_posts.post_content LIKE '%search-string%')))
$search = str_replace(
'AND ((',
'AND (((' . $wpdb->posts . '.guid LIKE \'%' . $wpdb->esc_like( $search_string ) . '%\') OR ',
$search
);
return $search;
}