获取多个类别中的链接(交集)

时间:2012-08-13 作者:Sisir

我正在使用get_bookmarks() 获取书签链接。我可以在cat A中获得链接or B类,但我只想在A和and B

Example what I need:

我有三个链接类别cat#1, cat#2, cat#3.

我需要在两者中获得链接cat#1 AND cat#2cat#1 OR cat#2 (交叉点)。

I am currently using:

$links = get_bookmarks(array(\'category\' => $term_ids));
因为how get_bookmarks() works.

        $category_query = \'\';
        $join = \'\';
        if ( !empty($category) ) {
                $incategories = preg_split(\'/[\\s,]+/\',$category);
                if ( count($incategories) ) {
                        foreach ( $incategories as $incat ) {
                                if (empty($category_query))
                                        $category_query = \' AND ( tt.term_id = \' . intval($incat) . \' \';
                                else
                                        $category_query .= \' OR tt.term_id = \' . intval($incat) . \' \';
                        }
                }
        }
编辑器提示:添加示例代码以便于理解-使用OR 默认情况下为。当他们通过$wpdb->get_result(), 除了查询的结果之外,过滤没有简单的解决方案

如果您有任何不同方法的帮助或想法,我们将不胜感激。

UPDATE

我正在尝试用get\\u bookmarks()函数生成一个新函数。

我将上面显示的代码改为下面的代码(改为或改为和)。但现在什么都没有回来。也许我需要将SQL更改为其他内容。所以,我需要advice on this.

if ( !empty($category) ) {
        $incategories = preg_split(\'/[\\s,]+/\',$category);
        if ( count($incategories) ) {
            foreach ( $incategories as $incat ) {
                if (empty($category_query))
                    $category_query = \' AND ( tt.term_id = \' . intval($incat) . \' \';
                else{
                    // sisir
                    $category_query .= \' AND tt.term_id = \' . intval($incat) . \' \';
                }
            }
        }
    }

3 个回复
SO网友:kaiser

应该很简单:只需从link_category 并使用get_terms() 相反,它应该像你需要的那样工作。

get_terms(
     \'link_category\'
    ,array(
         \'include\'      => array( 1, 2, 3 )
        ,\'orderby\'      => \'name\'
        ,\'order\'        => \'ASC\'
        ,\'hierarchical\' => 0
     )
);

SO网友:Rarst

分叉get_bookmarks() 看起来很麻烦,我会编写一些代码(如果速度变慢,则缓存)。类似这样:

/**
 * Retrieve links that have all of the terms assigned.
 * 
 * @param array $term_ids
 *
 * @return array of link objects
 */
function get_bookmarks_in_terms( $term_ids ) {

    $bookmark_ids = array();

    foreach ( $term_ids as $term_id ) {

        $bookmarks_in_term = get_objects_in_term( $term_id, \'link_category\' );

        if ( empty( $bookmarks_in_term ) )
            return array();

        if ( empty( $bookmark_ids ) )
            $bookmark_ids = $bookmarks_in_term;
        else
            $bookmark_ids = array_intersect( $bookmark_ids, $bookmarks_in_term );
    }

    if ( empty( $bookmark_ids ) )
        return array();

    return get_bookmarks( array( \'include\' => implode( \',\', $bookmark_ids ) ) );
}

SO网友:Tom J Nowell

使用get_objects_in_term 要使用这些术语获取所有对象,请执行以下类似操作:

$objects = get_objects_in_term($term_ids,\'link_category\');
$links = get_bookmarks(array(\'include\' => $objects ));

结束

相关推荐