Setarea Categoriei Implicite pentru Tipurile Personalizate de Postare la Autosalvare

28 mai 2015, 11:12:33
Vizualizări: 14.4K
Voturi: 6

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');
0
Toate răspunsurile la întrebare 4
5

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ă.

28 mai 2015 12:01:30
Comentarii

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ă).

zk87 zk87
28 mai 2015 18:53:47

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

zk87 zk87
28 mai 2015 18:54:41

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

zk87 zk87
28 mai 2015 18:56:03

Ce valori transmiteți ca $category și $uncategoried?

mishu mishu
30 mai 2015 02:32:01

wp_set_opject_terms( get_the_ID(), '1', 'category' ); Puteți utiliza acest cod pentru categoria implicită Necategorizat a postării.

mishu mishu
30 mai 2015 02:39:00
2

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 );
12 nov. 2016 01:31:45
Comentarii

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?

Shae Shae
12 mar. 2019 14:34:57

Din câte știu eu, nu. Dacă scrii un post standard, atunci categoria cu ID-ul 1 va fi selectată după salvarea postării, nu înainte.

BrainBUG BrainBUG
24 mar. 2019 20:06:04
0

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.

23 sept. 2020 14:00:05
0

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 );
22 feb. 2021 14:22:58