web-dev-qa-db-fra.com

Définition de la catégorie par défaut pour le type de publication personnalisé après enregistrement automatique

Je cherche depuis quelques heures et ai consulté plusieurs postes, mais il semble que cela fonctionne.

J'ai ce bug étrange où les utilisateurs ne peuvent pas voir leurs brouillons d'un type d'article personnalisé s'ils ne leur attribuent pas de catégorie. Donc, s’ils cliquent simplement sur "enregistrer en tant que brouillon" et veulent y revenir plus tard, ils ne le verront pas (je dois entrer en tant qu’administrateur et définir une catégorie pour qu’il soit visible pour eux). Je ne sais pas pourquoi cela se produit, mais je suis disposé à y remédier.

Dans Paramètres> Écriture, vous pouvez définir la catégorie par défaut pour une publication standard, mais aucune option de ce type n'est disponible pour un type de publication personnalisé. Je peux très bien définir le type par défaut sur "Non catégorisé", comme pour les publications classiques. Donc j'essaie d'accomplir ceci.

Certains extraits que j'ai rencontrés, comme this sont destinés à la "catégorie par défaut lors de la publication", mais j'en ai besoin lors de l'enregistrement automatique (certains utilisateurs ont simplement accès à "Enregistrer le brouillon" et "Soumettre pour publication"). Au moins 6 personnes que j'ai rencontrées sont sans réponse.

J'ai implémenté un code spécifique sans succès (je ne trouve pas l'extrait de code pour la vie, mais la catégorie par défaut souhaitée dans l'exemple était "auteurs"). Cela me rend dingue et j'apprécierais vraiment votre aide. Merci.

EDIT: J'ai essayé le code suivant (que j'ai obtenu de ici ) et que 'non catégorisé' a été vérifié automatiquement lors de la sauvegarde pour le type de message 'communauté' mais le problème est qu'il écrase complètement autre catégories que vous pourriez remplacer par. Autrement dit, si vous décochez la case "non catégorisé" et choisissez des catégories significatives, après "publier" ou "enregistrer", toutes ces sélections sont effacées et le résultat redevient une communauté. Vous devez en avoir simplement "non catégorisé" jusqu'à l'utilisateur remplace cette catégorie par défaut (exactement comme une catégorie par défaut fonctionne avec le type "post" standard).

function add_comm_category_automatically($post_ID) {
global $wpdb;
if(!wp_is_post_revision($post_ID)) {
$uncategorized= array (1);
wp_set_object_terms( $post_ID, $uncategorized, 'category');
}
}
add_action('save_post', 'add_comm_category_automatically');
4
zk87

Utilisez le crochet d’action save_post et dans la fonction de rappel, utilisez la fonction wp_set_object_terms ($ object_id, $ terms, $ taxonomy, $ append).

Pour votre message personnalisé tapez le code peut être comme ça

function save_book_meta( $post_id, $post, $update ) {

    $slug = 'book'; //Slug of CPT

    // If this isn't a 'book' post, don't update it.
    if ( $slug != $post->post_type ) {
        return;
    }

    wp_set_object_terms( get_the_ID(), $term_id, $taxonomy );
}

add_action( 'save_post', 'save_book_meta', 10, 3 );

$ taxonomy - Le contexte dans lequel relier le terme à l'objet. Cela peut être catégorie, post_tag ou le nom d'une autre taxonomie.

$ term_id - ID de terme de la taxonomie

Je ne connais pas votre projet à fond, vous pouvez donc considérer cet extrait comme un moyen de faire ce que vous vouliez faire.

Pour plus de référence, visitez ces deux liens ci-dessous:

https://codex.wordpress.org/Function_Reference/wp_set_object_terms

https://codex.wordpress.org/Plugin_API/Action_Reference/save_post

J'espère que vous trouverez un moyen de sortir.

2
mishu

J'utilise pods.io pour créer mes CPT et mes taxonomies personnalisées. Avait le même problème. Avec le code de @mishu, j'ai pu atteindre mon objectif.

function event_preset_category( $post_id, $post, $update ) {

    $slug = 'termine'; //Slug of CPT

    // If this isn't the right slug, don't update it.
    if ( $slug != $post->post_type ) {
        return;
    }

    // Get the ID of default/ fallback category
    // $default_term = get_term_by('slug', 'your_term_slug', 'your_custom_taxonomy');

    $default_term = get_term_by('slug', 'alle', 'termin_cat');

    wp_set_object_terms( get_the_ID(), $default_term->term_id, 'termin_cat' );
}

add_action( 'save_post', 'event_preset_category', 10, 3 );
0
BrainBUG