如何让Wordpress媒体搜索包含标签?

时间:2013-12-05 13:31:21

标签: wordpress

我已使用以下代码为所有媒体项目添加了标签:

function wptp_add_tags_to_attachments() {
    register_taxonomy_for_object_type( 'post_tag', 'attachment' );
}
add_action( 'init' , 'wptp_add_tags_to_attachments' );

非常期待一件事。如果我在管理媒体库中搜索媒体文件,则它不适用于标记。

如何让管理媒体库在搜索中包含标签?

4 个答案:

答案 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 );

这些功能的作用是:

  1. custom_attachments_join个函数加入term_relationshipsterm_taxonomy,以便我们能够搜索标记
  2. custom_attachments_where函数修改WordPress默认值,其中条件包含我们的搜索字词以搜索taxonomyterms字段
  3. custom_attachments_groupby按条件添加组以删除重复的帖子(如果有)。
  4. 这些功能还会检查我们是否搜索 附件以及我们是否在 WordPress 管理区域中执行搜索。

    请查看此链接以获取有关我使用的挂钩的更多参考。

    希望这有助于你

答案 1 :(得分:0)

此插件的更改日志页面显示它搜索由其程序添加的媒体标记: http://wordpress.org/plugins/media-tags/changelog/

如果您正在构建自己的插件,我建议您抓住他们的代码并查看他们正在做的事情。否则,他们的插件似乎正是您正在寻找的。

答案 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... );
    }

如果有人可以帮助您?