web-dev-qa-db-fra.com

Mettre à jour le nombre de termes à l'aide d'une fonction de rappel

Avec wp_update_term_count_now, comment puis-je utiliser update_count_callback pour spécifier mon propre compte? J'ai besoin d'inclure les comptes d'une autre base de données que la catégorie de base de données actuelle est capable d'afficher. Les catégories actuelles ne peuvent contenir aucune publication, mais peuvent être visualisées et afficher des publications de la même catégorie dans une autre base de données.

Je ne suis pas tout à fait sûr de savoir comment renvoyer l'appel au wp_update_term_count_now, ni ce qu'il doit contenir - faut-il simplement un nouveau décompte?

1
Innate

Je pense avoir résolu le problème. Tout d'abord, vous devez définir votre taxonomie. Je tire ce code directement du codex; Cependant, j'ai ajouté un paramètre update_count_callback. J'ai réglé ceci sur l'intelligemment intitulé my_update_count_callback. Cela précise simplement que lorsqu'un poste de type post (quel que soit le CPT auquel vous associez la taxonomie) est ajouté ou mis à jour, cette fonction sera exécutée à la place de la routine normale de mise à jour du compte. La taxonomie est enregistrée auprès de:

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

C'est la partie la plus simple. Ensuite, j'ai défini le rappel. Notez que ce rappel prendra deux paramètres terms (les identifiants de termes associés au CPT) et taxonomy (le nom de la taxonomie). La fonction de mise à jour normale est définie dans taxonomy.php autour de la ligne 2435. Si vous avez un rappel spécifié, il exécutera cette routine et non la normale. Pour ma fonction ci-dessous, j'ai simplement modifié le code normal.

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

Tout ce que vous avez à faire est d'écrire vos routines pour obtenir votre compte, puis de le mettre à jour. Notez que je suis parti dans les deux appels do_action car la fonction normale permet d’injecter du code ici. Je pense qu'il est important de laisser ceux-ci dedans afin que votre plugin ne provoque pas d'autres dysfonctionnements.

7
tollmanz