Setarea Categoriei Implicite pentru Tipurile Personalizate de Postare la Autosalvare
Am căutat timp de câteva ore și am consultat multiple postări, dar nu reușesc să fac asta să funcționeze.
Am o problemă ciudată în care utilizatorii nu pot vedea drafturile lor pentru un tip personalizat de postare dacă nu atribuie o categorie. Dacă doar apasă 'salvează ca draft' și vor să revină mai târziu, postarea nu va fi vizibilă pentru ei (trebuie să intru ca admin să setez o categorie pentru a deveni vizibilă). Nu înțeleg de ce se întâmplă asta, dar sunt dispus să o rezolv.
În Setări > Scriere poți seta categoria implicită pentru o postare obișnuită, dar nu există o astfel de opțiune pentru tipurile personalizate de postare. Aș dori să setez implicit categoria 'Necategorizat', la fel cum este setat pentru postările obișnuite.
Unele fragmente de cod pe care le-am găsit, cum ar fi acesta, sunt orientate spre 'categorie implicită la publicare', dar eu am nevoie la autosalvare (unii utilizatori au acces doar la 'salvează draft' și 'trimite pentru publicare'). Cel puțin 6 exemple găsite nu au răspuns.
Am încercat un cod specific fără succes (nu îl mai găsesc, dar categoria implicită din exemplu era 'autori'). Acest lucru mă enervează și aș aprecia foarte mult ajutorul vostru. Mulțumesc.
EDIT: Am încercat următorul cod (pe care l-am obținut de aici) și am reușit să fac ca 'necategorizat' să fie bifat automat la salvare pentru tipul de postare 'comunitate', dar problema este că suprascrie complet alte categorii pe care le-ai putea selecta. Adică, dacă deselectezi 'necategorizat' și alegi alte categorii, la 'publicare' sau 'salvare', toate selecțiile sunt șterse și revine la comunitate. Am nevoie ca 'necategorizat' să fie setat doar până când utilizatorul înlocuiește acea categorie implicită (exact cum funcționează categoria implicită pentru tipul 'post' obișnuit).
function add_comm_category_automatically($post_ID) {
global $wpdb;
if(!wp_is_post_revision($post_ID)) {
$uncategorized = array(1); // ID-ul categoriei "Necategorizat"
wp_set_object_terms($post_ID, $uncategorized, 'category');
}
}
add_action('save_post', 'add_comm_category_automatically');
Folosește hook-ul de acțiune save_post și în funcția callback utilizează funcția wp_set_object_terms( $object_id, $terms, $taxonomy, $append ).
Pentru tipul tău personalizat de postare (CPT), codul poate arăta astfel:
function save_book_meta( $post_id, $post, $update ) {
$slug = 'book'; //Slug-ul CPT-ului
// Dacă aceasta nu este o postare de tip 'book', nu o actualiza.
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 - Contextul în care termenul este asociat obiectului. Poate fi category, post_tag sau numele unei alte taxonomii.
$term_id - ID-ul termenului din taxonomie
Nu cunosc în detaliu proiectul tău, așa că poți considera acest fragment de cod ca o metodă de a realiza ceea ce dorești.
Pentru mai multe informații, vizitează următoarele linkuri:
https://codex.wordpress.org/Function_Reference/wp_set_object_terms
https://codex.wordpress.org/Plugin_API/Action_Reference/save_post
Sper că vei găsi soluția potrivită.

mulțumesc pentru răspuns. după cum am menționat în postarea principală, aș dori ca categoria să fie 'neclasificat' iar tipul de postare se numește 'comunitate'. totuși, cel mai important este că ori de câte ori se apasă 'publică', 'actualizează', 'salvează ca ciornă', 'trimite pentru revizuire' sau orice altceva, noile categorii alese de utilizator pentru a înlocui 'neclasificat' să nu fie suprascrise (așa cum se întâmplă cu codul pe care tocmai l-am adăugat în postarea principală).

Am încercat mai multe variante ale codului sugerat de tine, dar nu am reușit să fac nimic să funcționeze. Cea care mi s-a părut că are cele mai mari șanse să funcționeze a fost:
`function save_community_meta( $post_id, $post, $update ) {
$slug = 'community'; //Slug-ul CPT
// Dacă aceasta nu este o postare 'comunitate', nu o actualiza.
if ( $community != $post->post_type ) {
return;
}
wp_set_object_terms( get_the_ID(), $category, $uncategorized);
}
add_action( 'save_community', 'save_community_meta', 10, 3 );`

(scuze pentru dezordine... nu reușesc să format categorii la fel de elegant ca postările)

Folosesc pods.io pentru a-mi construi CPT-uri și taxonomii personalizate. Am avut aceeași problemă. Cu codul de la @mishu, am reușit să îmi ating scopul.
function event_preset_category( $post_id, $post, $update ) {
$slug = 'termine'; //Slug-ul CPT-ului
// Dacă acesta nu este slug-ul corect, nu îl actualiza.
if ( $slug != $post->post_type ) {
return;
}
// Obține ID-ul categoriei implicite/de rezervă
// $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 );

Există vreo modalitate de a face acest lucru înainte de salvarea automată? Astfel încât o categorie implicită să fie selectată la crearea postării?

Dacă înțeleg corect, tot ce trebuie să faci este să adaugi parametrul opțional $append ca true (valoarea implicită este false)
wp_set_object_terms( int $object_id, string|int|array $terms, string $taxonomy, bool $append = false )
de exemplu, în codul tău postat: wp_set_object_terms( $post_ID, $uncategorized, 'category', true);
asta a funcționat pentru mine.

Este posibil să faceți astfel. Dacă alte răspunsuri nu au funcționat, puteți încerca această variantă:
function auto_category( $post_id, $post, $update ) {
$slug = 'news'; //Slug-ul CPT-ului
// Dacă acesta nu este slug-ul corect, nu actualizați.
if ( $slug != $post->post_type ) {
return;
}
$category_term = get_term_by( 'name', 'news_category_slug', 'category' );
wp_set_object_terms( get_the_ID(), $category_term->term_id, 'category' );
}
add_action( 'save_post', 'auto_category', 10, 3 );
