web-dev-qa-db-ja.com

コールバック関数を使用して用語カウントを更新する

Wp_update_term_count_nowで、update_count_callbackを使用して自分のカウントを指定する方法を教えてください。現在のデータベースカテゴリが表示できる別のデータベースからの数を含める必要があります。現在のカテゴリには投稿が含まれていない可能性がありますが、別のデータベースの同じカテゴリの投稿を表示して表示することはできます。

どのようにしてコールをwp_update_term_count_nowに渡すのか、また何を含めるべきかわからないのですが、新しいカウントが必要なのでしょうか。

1
Innate

私はこれを解決したと思います。まず第一に、あなたはあなたの分類法を定義する必要があります。私はこのコードをコーデックスから直接引っ張っています。ただし、update_count_callbackというパラメータを1つ追加しました。これをmy_update_count_callbackという巧妙な名前に設定しました。これは、タイプpost(これは分類法を関連付けたCPTになります)の投稿が追加または更新されたときに、カウントを更新するための通常のルーチンの代わりにこの関数が実行されることを指定します。分類法は次のものに登録されています。

add_action('init', 'add_taxonomy');
function add_taxonomy()
{
    // Add new taxonomy, make it hierarchical (like categories)
    $labels = array(
        'name' => _x( 'Genres', 'taxonomy general name' ),
        'singular_name' => _x( 'Genre', 'taxonomy singular name' ),
        'search_items' =>  __( 'Search Genres' ),
        'all_items' => __( 'All Genres' ),
        'parent_item' => __( 'Parent Genre' ),
        'parent_item_colon' => __( 'Parent Genre:' ),
        'edit_item' => __( 'Edit Genre' ),
        'update_item' => __( 'Update Genre' ),
        'add_new_item' => __( 'Add New Genre' ),
        'new_item_name' => __( 'New Genre Name' ),
        'menu_name' => __( 'Genre' ),
    );

    register_taxonomy(
        'genre',
        array('post'),
        array(
            'hierarchical' => true,
            'labels' => $labels,
            'show_ui' => true,
            'query_var' => true,
            'rewrite' => array( 'slug' => 'genre' ),
            'update_count_callback' => 'my_update_count_callback'
        )
    );
}

それはまっすぐな部分です。次に、コールバックを定義しました。このコールバックは、2つのパラメータterms(CPTに関連付けられているID)とtaxonomy(分類名)を取ります。通常の更新関数は、2435行目のtaxonomy.phpで定義されています。指定されたコールバックがある場合、通常のものではなくそのルーチンを実行します。以下の私の機能のために、私は単純に通常のコードを修正しました。

function my_update_count_callback($terms, $taxonomy)
{
    global $wpdb;
    foreach ( (array) $terms as $term)
    {
        do_action( 'edit_term_taxonomy', $term, $taxonomy );

        // Do stuff to get your count
        $count = 15;

        $wpdb->update( $wpdb->term_taxonomy, array( 'count' => $count ), array( 'term_taxonomy_id' => $term ) );
        do_action( 'edited_term_taxonomy', $term, $taxonomy );
    }
}

あなたがする必要があるのはあなたのカウントを得るためにあなたのルーチンを書いてそして次にカウントを更新することです。通常の関数ではここにコードを挿入することができるので、2つのdo_action呼び出しを残しました。あなたのプラグインが他のプラグインを誤動作させないようにそれらをそこに残すことが重要だと思います。

7
tollmanz