我在一个多站点中有一个父亲博客/主博客,其中有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
(
)
)
最合适的回答,由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);
希望,这对萨尔茨堡有帮助,并致以最良好的问候!