使用JSON API插件获取子类别

时间:2014-10-09 作者:Vladimir Stazhilov

如何使用JSON API wordpress插件获取子类别?

我知道如何获取类别,但如何同时获取带有子类别的类别?如何修改现有代码?

public function get_category_index() {
    global $json_api;
    $args = null;
    if (!empty($json_api->query->parent)) {
      $args = array(
        \'parent\' => $json_api->query->parent
      );
    }
    $categories = $json_api->introspector->get_categories($args);
    return array(
      \'count\' => count($categories),
      \'categories\' => $categories
    );
 }
我知道我们有this answer 这不太容易理解

1 个回复
最合适的回答,由SO网友:kaiser 整理而成

使用当前版本的“WP API”(JSON API插件)检索术语,有一种简单的检索术语的方法:

GET /taxonomies/<taxonomy>/terms
负责的方法是get_taxonomy_terms( $taxonomy )plugins core.

你必须检查一下is_wp_error() 在返回值上,检查在调用自己的调用时是否存在分类法。

内部构件

当我们谈论一个新的核心API当前作为插件运行时,它紧贴核心本身并使用$terms = get_terms( $taxonomy, $args ); 检索给定分类法的术语/分类单元(类别、后标记等)。该调用的唯一默认参数是hide_empty => true.

过滤返回的术语#1)

查看core function internals, 您将找到一个筛选器:

$args = apply_filters( \'get_terms_args\', $args, $taxonomies );
因此,只需对该过滤器应用回调。小心不要拦截其他呼叫。

<?php
/** Plugin Name: (#163923) Alter term fetching args for the WP API/JSON plugin */

add_filter( \'get_terms_args\', \'remote_parent_terms_from_json_response\', 10, 2 );
function remote_parent_terms_from_json_response( Array $args, Array $taxonomies )
{
    // Do not impact subsequent calls and remove the callback. Single running filter cb.
    if ( /* some case */ )
    {
        remove_filter( current_filter(), __FUNCTION__ );

        return wp_parse_args( array(
            // alter args in here
        ), $args );
    }

    // default case
    return $args;
}
在调用DB之后立即使用get_terms(), 函数循环遍历所有获取的术语,并使用prepare_taxonomy_term( $term ) 方法此方法的最末端有一个过滤器:

return apply_filters( \'json_prepare_term\', $data, $term, $context );
你可以直接回来FALSENULL 如果分类学术语不适用(例如,作为父项parent => 0 设置),然后运行array_filter( $terms ) 在返回的数据上删除所有未设置、错误或无效的术语。

这可能是您希望在原型制作过程中使用的更简单的解决方案。当您首先从数据库中检索术语,然后将其删除时,它也是一种更为数据库密集的解决方案,这会给您的请求增加额外的开销。

结束

相关推荐

Multisite and plugins options

我需要更多关于get_site_option(), update_site_option() 和add_site_option().在codex中,他们说它与单次安装相同,只是在多站点中,它返回网络范围的选项。好吧,但我对这一点感到困惑:这是否意味着一旦设置了网络范围选项,所有站点的选项都是相同的?还是每个站点都会覆盖它?我的意思是如果我这样做: update_site_option(\'option_group\', \'default_options());// default_options() r