Tema de publicación de WordPress y campo personalizado

26 sept 2011, 15:10:22
Vistas: 3.24K
Votos: 1

Tengo un sitio en WordPress donde he utilizado campos personalizados, pero ahora quiero usar ese campo personalizado como etiqueta de publicación automáticamente.

¿Alguien tiene alguna idea?

Gracias.

0
Todas las respuestas a la pregunta 3
1

Para convertir los campos personalizados antiguos, puedes escribir un plugin que, al activarse, obtenga todas las entradas con el nombre de tu campo personalizado y los convierta en etiquetas utilizando la útil función wp_set_post_terms.

Primero, configura algunas constantes con los nombres de tus campos y el tipo de entrada.

<?php
/**
 * ¡CAMBIA ESTO! ¿Cuál es el nombre de tu campo personalizado?
 */
define( 'WPSE29498_FIELD', 'nombre_del_campo_personalizado' );


/**
 * ¡CAMBIA ESTO! ¿Qué tipo de entrada?
 */
define( 'WPSE29498_TYPE', 'post' );

Luego, la función del gancho de activación:

<?php
register_activation_hook( __FILE__, 'wpse29498_field_to_tag' );
function wpse29498_field_to_tag()
{
    $posts = get_posts(
        array(
            'post_type'     => WPSE29498_TYPE,
            'post_status'   => array( 'publish', 'draft', 'pending', 'future' ),
            'numberposts'   => -1,
            'meta_key'      => WPSE29498_FIELD
        )
    );

    if( empty( $posts ) ) return;

    foreach( $posts as $p )
    {
        if( $meta = get_post_meta( $p->ID, WPSE29498_FIELD, true ) )
        {
            wp_set_post_terms( $p->ID, $meta, 'post_tag', true );
        }
    }
}

Finalmente, puedes engancharte a save_post y verificar si el valor del campo personalizado está presente. Si es así, asegúrate de que no sea un término ya existente, luego insértalo si no lo está.

No estoy seguro si esto es algo que necesitas o una conversión única.

<?php
add_action( 'save_post', 'wpse29498_save_post' );
function wpse29498_save_post( $post_id )
{
    if( $meta = get_post_meta( $post_id, WPSE29498_FIELD, true ) )
    {
        // obtén la etiqueta actual de la entrada
        $terms = wp_get_object_terms( $p->ID, 'post_tag', 'name' );

        // si nuestro término ya está ahí, sal
        if( in_array( $meta, $terms ) ) return;

        // agrega el término si no está
        wp_set_post_terms( $post_id, $meta, 'post_tag', true );
    }
}

Como un plugin.

2 dic 2011 22:00:44
Comentarios

¿Por favor es difícil imaginar lo mismo para convertir en una categoría en lugar de una etiqueta?

jjj jjj
9 jun 2015 22:55:51
0

Por lo que sé, esto no es posible hacerlo automáticamente "de forma nativa". Una búsqueda rápida en Google muestra que actualmente no hay plugins que realicen esta tarea por ti.

Sin embargo, no veo ninguna razón por la que no se pueda escribir un plugin para hacer esto. Necesitarás usar el hook "save_post", que se ejecutará cada vez que se guarde/actualice una publicación, comprobar el campo personalizado y aplicarlo como una etiqueta.

La documentación sobre este hook en particular es escasa, pero se menciona aquí:

http://codex.wordpress.org/Plugin_API/Action_Reference

26 sept 2011 15:29:42
1

Hace un tiempo me encontré con una pregunta similar de alguien que preguntaba cómo añadir automáticamente palabras clave del plugin All-in-one SEO como etiquetas de las publicaciones (http://www.vidalquevedo.com/how-to-add-tags/#li-comment-62)

Después de ver tu pregunta, tomé ese script que escribí y lo modifiqué para que también añada automáticamente los valores de campos personalizados como etiquetas de las publicaciones.

Aquí está el enlace al script y la publicación: http://www.vidalquevedo.com/wordpress-how-to-automatically-convert-custom-fields-to-post-tags/

Gracias, y por favor avísame si te ayuda!

Vq.

26 sept 2011 20:00:14
Comentarios

Creo que tu solución es agregar las palabras clave de 'All in one SEO' como etiquetas, como leí en vidalquevedo.com/how-to-add-tags#comment-123. No estoy usando All in one SEO, simplemente insertando un campo personalizado en la publicación y quiero que esas sean las etiquetas para esa publicación.

shah parthvi shah parthvi
1 dic 2011 10:31:53