Establecer categoría predeterminada para Custom Post Type al guardar automáticamente

28 may 2015, 11:12:33
Vistas: 14.4K
Votos: 6

He estado buscando durante horas y consultado múltiples publicaciones, pero no logro que esto funcione.

Tengo este extraño error donde los usuarios no pueden ver sus borradores de un custom post type si no asignan una categoría. Si hacen clic en 'guardar borrador' y quieren volver más tarde, no será visible para ellos (yo tengo que entrar como admin y asignar una categoría para que sea visible). No sé por qué ocurre esto pero estoy dispuesto a encontrar una solución.

En Ajustes > Escritura puedes establecer la categoría predeterminada para un post normal, pero no hay tal opción para custom post types. Me conformo con establecer el tipo predeterminado como 'Sin categorizar', igual que con los posts normales. Eso es lo que estoy tratando de lograr.

Algunos fragmentos que he encontrado como este están dirigidos a 'categoría predeterminada al publicar', pero yo necesito que sea al guardar automáticamente (algunos usuarios solo tienen acceso a 'guardar borrador' y 'enviar para publicación'). Al menos 6 que encontré no tenían respuesta.

Implementé un código específico sin éxito (no puedo encontrar el fragmento, pero la categoría predeterminada que usaban era 'autores'). Esto me está volviendo loco, y agradecería mucho su ayuda. Gracias.

EDIT: Probé el siguiente código (que obtuve aquí) y logré que 'sin categorizar' se marque automáticamente al guardar para el post type 'community', pero el problema es que sobrescribe otras categorías que puedas asignar. Es decir, si desmarcas 'sin categorizar' y eliges categorías significativas, al 'publicar' o 'guardar', todas esas selecciones se borran y vuelve a 'community'. Necesito que solo tenga 'sin categorizar' hasta que el usuario reemplace esa categoría predeterminada (exactamente como funciona la categoría predeterminada con el tipo 'post' normal).

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');
0
Todas las respuestas a la pregunta 4
5

Utiliza el gancho de acción save_post y en la función de callback usa la función wp_set_object_terms( $object_id, $terms, $taxonomy, $append ).

Para tu tipo de entrada personalizada, el código puede ser así:

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

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

    // Si esto no es una entrada 'book', no la actualices.
    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 - El contexto en el que relacionar el término con el objeto. Puede ser category, post_tag o el nombre de otra taxonomía.

$term_id - ID del término de la taxonomía

No conozco tu proyecto a fondo, así que puedes considerar este fragmento como una forma de hacer lo que querías hacer.

Para más referencia, visita estos dos enlaces dados a continuación:

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

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

Espero que encuentres una solución.

28 may 2015 12:01:30
Comentarios

gracias por tu respuesta. como mencioné en el post principal, quiero que la categoría sea 'sin categorizar' y el tipo de publicación se llama 'comunidad'. sin embargo, lo crítico es que cuando se presione 'publicar', 'actualizar', 'guardar borrador', 'enviar para revisión' o cualquier otra opción, las NUEVAS categorías que el usuario elija para reemplazar 'sin categorizar' no sean sobrescritas (como ocurre con el código que acabo de agregar en el post principal).

zk87 zk87
28 may 2015 18:53:47

Probé varias iteraciones del código que sugeriste, pero no logré que nada funcionara. El que pensé que tenía más probabilidades de funcionar fue:

`function save_community_meta( $post_id, $post, $update ) {

$slug = 'community'; //Slug del CPT

// Si no es una publicación de 'comunidad', no la actualices.
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 may 2015 18:54:41

(perdón por el desorden... no puedo formatear las categorías tan ordenadamente como los posts)

zk87 zk87
28 may 2015 18:56:03

¿Qué valores estás pasando como $category y $uncategoried?

mishu mishu
30 may 2015 02:32:01

wp_set_object_terms( get_the_ID(), '1', 'category' ); Puedes usar este código para la categoría "Uncategorized" predeterminada de la publicación.

mishu mishu
30 may 2015 02:39:00
2

Estoy usando pods.io para construir mis CPTs (Custom Post Types) y taxonomías personalizadas. Tenía el mismo problema. Con el código de @mishu, pude lograr mi objetivo.

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

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

    // Si este no es el slug correcto, no actualizarlo
    if ( $slug != $post->post_type ) {
        return;
    }

    // Obtener el ID de la categoría predeterminada/respaldo
    // $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
Comentarios

¿Hay alguna manera de hacer esto antes del guardado automático? ¿Para que una categoría predeterminada se seleccione al crear la publicación?

Shae Shae
12 mar 2019 14:34:57

No que yo sepa. Si escribes una publicación estándar, entonces la categoría con ID 1 se seleccionará después de guardar la publicación, no antes.

BrainBUG BrainBUG
24 mar 2019 20:06:04
0

Si entiendo correctamente, todo lo que necesitas hacer es agregar el parámetro opcional $append como true (el valor predeterminado es false)

wp_set_object_terms( int $object_id, string|int|array $terms, string $taxonomy, bool $append = false )

Por ejemplo, en el código que publicaste: wp_set_object_terms( $post_ID, $uncategorized, 'category', true);

Eso funcionó para mí.

23 sept 2020 14:00:05
0

Es posible hacerlo de esta manera. Si otras respuestas no funcionaron, puedes intentar esto:

function auto_category( $post_id, $post, $update ) {
    
    $slug = 'news'; //Slug del CPT (Custom Post Type)
    
    // Si este no es el slug correcto, no lo actualices.
    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