我已使用以下代码为所有媒体项目添加了标签:
function wptp_add_tags_to_attachments() {
register_taxonomy_for_object_type( 'post_tag', 'attachment' );
}
add_action( 'init' , 'wptp_add_tags_to_attachments' );
非常期待一件事。如果我在管理媒体库中搜索媒体文件,则它不适用于标记。
如何让管理媒体库在搜索中包含标签?
答案 0 :(得分:1)
您可以使用WordPress操作挂钩执行此操作。使用挂钩 posts_where , posts_join 和 posts_groupby 搜索附件时,您需要更新WordPress默认搜索查询。
请在主题 functions.php
中添加以下内容function custom_attachments_join( $join, $query )
{
global $wpdb;
//if we are not on admin or the current search is not on attachment return
if(!is_admin() || (!isset($query->query['post_type']) || $query->query['post_type'] != 'attachment'))
return $join;
// if current query is the main query and a search...
if( is_main_query() && is_search() )
{
$join .= "
LEFT JOIN
{$wpdb->term_relationships} ON {$wpdb->posts}.ID = {$wpdb->term_relationships}.object_id
LEFT JOIN
{$wpdb->term_taxonomy} ON {$wpdb->term_taxonomy}.term_taxonomy_id = {$wpdb->term_relationships}.term_taxonomy_id
LEFT JOIN
{$wpdb->terms} ON {$wpdb->terms}.term_id = {$wpdb->term_taxonomy}.term_id ";
}
return $join;
}
add_filter( 'posts_join', 'custom_attachments_join', 10, 2 );
function custom_attachments_where( $where, $query )
{
global $wpdb;
//if we are not on admin or the current search is not on attachment return
if(!is_admin() || (!isset($query->query['post_type']) || $query->query['post_type'] != 'attachment'))
return $where;
// if current query is the main query and a search...
if( is_main_query() && is_search() )
{
// explictly search post_tag taxonomies
$where .= " OR (
( {$wpdb->term_taxonomy}.taxonomy IN('post_tag') AND {$wpdb->terms}.name LIKE '%" . $wpdb->escape( get_query_var('s') ) . "%' )
)";
}
return $where;
}
add_filter( 'posts_where', 'custom_attachments_where', 10, 2 );
function custom_attachments_groupby( $groupby, $query )
{
global $wpdb;
//if we are not on admin or the current search is not on attachment return
if(!is_admin() || (!isset($query->query['post_type']) || $query->query['post_type'] != 'attachment'))
return $groupby;
// if current query is the main query and a search...
if( is_main_query() && is_search() )
{
// assign the GROUPBY
$groupby = "{$wpdb->posts}.ID";
}
return $groupby;
}
add_filter( 'posts_groupby', 'custom_attachments_groupby', 10, 2 );
这些功能的作用是:
custom_attachments_join
个函数加入term_relationships
和term_taxonomy
,以便我们能够搜索标记custom_attachments_where
函数修改WordPress默认值,其中条件包含我们的搜索字词以搜索taxonomy
或terms
字段custom_attachments_groupby
按条件添加组以删除重复的帖子(如果有)。这些功能还会检查我们是否搜索 附件以及我们是否在 WordPress 管理区域中执行搜索。
请查看此链接以获取有关我使用的挂钩的更多参考。
希望这有助于你
答案 1 :(得分:0)
此插件的更改日志页面显示它搜索由其程序添加的媒体标记: http://wordpress.org/plugins/media-tags/changelog/
如果您正在构建自己的插件,我建议您抓住他们的代码并查看他们正在做的事情。否则,他们的插件似乎正是您正在寻找的。 p>
答案 2 :(得分:0)
不幸的是,Sabari的解决方案并不适用于"添加媒体" - 部分。
我在 functions.php 中使用了以下功能(代码基于" Media Search Enhanced" Yoren Chang插件):
glfwCreateWindow
答案 3 :(得分:0)
该解决方案benedikt可以正常工作,但是语言过滤器与wpml插件一起使用。 我使用Polylang并寻找正确的方法来做同样的过滤器,即使使用Polylang文档也找不到解决方案...
这部分需要更改:
if ( class_exists('WPML_Media') ) {
global $sitepress;
//get current language
$lang = $sitepress->get_current_language();
$pieces['where'] .= $wpdb->prepare( " AND wpml_translations.element_type='post_attachment' AND wpml_translations.language_code = %s", $lang );
}
通过类似的方式:
if ( function_exists( 'pll_current_language' ) ) {
//get current language
$lang = pll_current_language();
$pieces['where'] .= $wpdb->prepare( here I don't know how to write it... );
}
如果有人可以帮助您?