获取多站点中特定分类内的所有术语

时间:2015-05-21 作者:Sagive

我在一个多站点中有一个父亲博客/主博客,其中有20多个术语的特定分类法。我只需要一个分类法中所有术语的列表。。。

我不介意使用WPDB进行查询,但只是不知道如何正确地编写它,或者以我尝试使用的任何其他方式:switch_to_blog“但这在查询条件时不起作用

Any suggestion?
我尝试了:多站点全局术语插件(不起作用)。。。

EDIT (response to question in comment)
这是我尝试过的切换到博客的一个示例:

function multisite_profession_select(){

        switch_to_blog(1);

        $taxonomies = array(\'rsitecat\');
        $args       = array(\'hide_empty\' => false);
        $terms      = get_terms($taxonomies, $args );

        echo \'<pre>\';
        print_r($terms);
        echo \'</pre>\';

        restore_current_blog();

    }

The reponse i get:

WP_ERROR OBJECT
(
    [ERRORS] => ARRAY
        (
            [INVALID_TAXONOMY] => ARRAY
                (
                    [0] => INVALID TAXONOMY
                )

        )

    [ERROR_DATA] => ARRAY
        (
        )

)

3 个回复
最合适的回答,由SO网友:Oleg Butuzov 整理而成

没有办法用“文字新闻”的方式做到这一点。。。

function multisite_profession_select(){
    switch_to_blog(1);
    $taxonomies = array(\'rsitecat\');

    $check_later = array();
    global $wp_taxonomies;
    foreach($taxonomies as $taxonomy){
        if (isset($wp_taxonomies[$taxonomy])){
            $check_later[$taxonomy] = false;
        } else {
            $wp_taxonomies[$taxonomy] = true;
            $check_later[$taxonomy] = true;
        }
    }

    $args       = array(\'hide_empty\' => false);
    $terms      = get_terms($taxonomies, $args );

    echo \'<pre>\';
    print_r($terms);
    echo \'</pre>\';


    if (isset($check_later))
        foreach($check_later as $taxonomy => $unset)
            if ($unset == true)
                unset($wp_taxonomies[$taxonomy]);

    restore_current_blog();
}
WP将检查分类法是否存在,但在多站点博客上,它只切换$table\\u前缀,但实际上并没有切换到博客。在这个固定的代码中,它应该欺骗WP,使其认为分类法注册并从mu博客表中检索术语。请求后-你杀死假分类鬼魂。

P/S/

我没有测试代码。

SO网友:jjarolim

如果您在从另一个博客获取数据时遇到问题,那么从长远来看,临时注册分类法等修复方法是一个真正的难题。

您不能真正依赖这种变通方法,因为这种变通方法模拟了随时间变化的内部wp基础设施。

Best practice imho 将是注册rest api端点(https://developer.wordpress.org/rest-api/extending-the-rest-api/adding-custom-endpoints/) 或xmlrpc端点(https://codex.wordpress.org/XML-RPC_Extending). 端点获取您需要的所有数据,并将其作为json返回。因此,您始终拥有一个干净的被查询博客的本地上下文,而不必与缺失的基础设施作斗争。

在源博客中是这样的:

add_action( 
    \'rest_api_init\', 
    function () {
        register_rest_route(\'your-namespace\', \'/get-terms/(?P<taxonomy>\\d+)\', array(
            \'methods\' => \'GET\',
            \'callback\' => function($data) {
                $taxonomy_slug = $data[\'taxonomy\'];
                return get_terms($taxonomy_slug, array(\'hide_empty\' => false));
            }
        ));
    }
);
在请求的博客中有类似的内容:

$api_request = \'http://the.domain.of.your.blog/wp-json/your-namespace/get-terms/slug-of-taxonomy\';
$api_response = wp_remote_get($api_request);
$taxonomy_terms = json_decode(wp_remote_retrieve_body($api_response), true);
希望,这对萨尔茨堡有帮助,并致以最良好的问候!

SO网友:Marcos Nakamine

这是另一种解决方法wpdb 对象:

function multisite_profession_select(){
    global $wpdb;

    switch_to_blog(1);

    $taxonomies = array(\'rsitecat\');
    $taxonomies = implode( "\',\'", $taxonomies );

    $terms = $wpdb->get_results( "
        SELECT t.*
        FROM
            {$wpdb->prefix}term_taxonomy AS tt
        INNER JOIN
            {$wpdb->prefix}terms AS t
            ON t.term_id = tt.term_id
        WHERE
            tt.taxonomy IN ( \'{$taxonomies}\' )
    " );

    echo \'<pre>\';
    print_r($terms);
    echo \'</pre>\';

    restore_current_blog();
}

结束

相关推荐

Display specific taxonomy

我有一个自定义的帖子类型位置我有一个自定义的分类地标在地标下,我有一些页面/帖子上的建筑地标列表,我希望能够从分类列表中插入特定的地标,而不是显示整个列表。我想我可以使用自定义字段,但我更希望它像分类法一样工作,在用户单击时,它将显示与该地标相关的所有帖子。搜索之后,似乎不可能显示单个分类术语?这是我用来显示分类列表的代码段。function list_terms_custom_taxonomy( $atts) { extract( shortcode_atts( array( \