web-dev-qa-db-fra.com

Ajouter une catégorie dans le type de post dynamiquement

j'ai le code qui peut ajouter un message dans un type de message personnalisé, mais l'ajout de la catégorie ne fonctionne pas.

$args = array(
    'post_title' => $title ,
    'post_status'   => 'publish',
    'post_type' => 'mypost' 
);

$post_id = wp_insert_post($args);

$category_ids = array(38,39);
wp_set_post_categories( $post_id, $category_ids, 'category');
1
Nikko Dela Cruz

Vous devez enregistrer le type de publication personnalisé avec la prise en charge de la taxonomie category:

add_action('init', 'cyb_register_post_type');
function cyb_register_post_type() {
    $args = array(
        // All the other args
        'taxonomies'          => array( 'category' ),
    );

    register_post_type( 'my_post_type', $args );
}

Vous pouvez ensuite définir les relations entre le type de publication personnalisé et la taxonomie categoy comme vous le faisiez, mais vous devez corriger le code.

À partir de ceci:

wp_set_post_categories( $post_id, $category_ids, 'category');

Pour cela (les catégories précédentes sont supprimées et remplacées par les nouvelles catégories):

wp_set_post_categories( $post_id, $category_ids );
// The above line is equivalent to
// wp_set_post_categories( $post_id, $category_ids, false );
// or
// wp_set_post_terms( $post_id, $category_ids, 'category', false );

Ou à (les catégories précédentes ne sont pas supprimées, de nouvelles catégories sont ajoutées):

wp_set_post_categories( $post_id, $category_ids, true );

Vous pouvez également enregistrer une taxonomie personnalisée et l'utiliser pour votre type d'article personnalisé:

add_action('init', 'cyb_register_post_type_and_taxonomy');
function cyb_register_post_type_and_taxonomy() {

    $post_type_args = array(
        // All the other args
        'taxonomies'          => array( 'my_custom_taxonomy' ),
    );

    register_post_type( 'my_post_type', $post_type_args );

    $taxonomy_args = array(
          // Arguments for the custom taxonomy
          // See https://developer.wordpress.org/reference/functions/register_taxonomy/
    );

    register_taxonomy( 'my_custom_taxonomy', 'my_post_type', $args );

}

Et utilisez ensuite wp_set_post_terms(), pas wp_set_post_categories():

wp_set_post_terms( $post_id, $category_ids, 'my_custom_taxonomy');
1
cybmeta

Comme vous le faites pour le type de publication personnalisé, vous devez utiliser la taxonomie. Je vais vous suggérer d'utiliser <?php wp_set_post_terms( $post_id, $terms, $taxonomy, $append ) ?>. s'il vous plaît se référer ce lien pour l'utilisation détaillée de la fonction.

0
Parth Patel