web-dev-qa-db-ja.com

JSON APIプラグインを使ってサブカテゴリを取得する

JSON APIワードプレスプラグインでサブカテゴリを取得する方法

カテゴリの取得方法はわかりますが、サブカテゴリのカテゴリを同時に取得する方法は何ですか?既存のコードを変更する方法

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
    );
 }

私たちは この答え を持っているのを知っています

1

用語を検索する

現在のバージョンの "WP API"(JSON APIプラグイン)では、簡単に用語を取得する方法があります。

GET /taxonomies/<taxonomy>/terms

担当するメソッドは plugins coreget_taxonomy_terms( $taxonomy )です。

あなたはあなた自身の呼び出しを呼び出す時点で分類法が存在するかどうかをチェックするために戻り値のis_wp_error()をチェックしなければならないでしょう。

内部

現在プラグインとして実行されている新しいコアAPIについて話しているように、それはコア自体の近くに固執し、与えられた分類法の用語/分類群(カテゴリ、タグ付けなど)を検索するために$terms = get_terms( $taxonomy, $args );を使います。その呼び出しの唯一のデフォルト引数はhide_empty => trueです。

返された用語のフィルタリング#1)

コア関数の内部構造 を見ると、フィルタが見つかります。

$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;
}

返された用語のフィルタリング#2)

get_terms()を使用してDBを呼び出した直後に、関数はフェッチされたすべての用語をループ処理し、 prepare_taxonomy_term( $term ) メソッドを使用してJSONified戻り値にそれらを「準備」します。このメソッドは、最後にフィルタがあります。

return apply_filters( 'json_prepare_term', $data, $term, $context );

タクソノミー用語が収まらない場合(たとえば、親でparent => 0が設定されている場合など)にFALSEまたはNULLを返し、返されたデータに対してarray_filter( $terms )を実行して未設定、偽または無効化された用語をすべて削除できます。

これはプロトタイピング中に使用したい簡単な解決策かもしれません。あなたが最初にDBから用語を検索し、その後それを削除し、あなたの要求に追加のオーバーヘッドを追加するので、それは同様によりDB集中的な解決策です。

0
kaiser