Cómo actualizar por lotes el contenido de la publicación con un valor meta personalizado de la publicación

2

Tengo un meta box personalizado, que utiliza WPAlchemy , en el que busco deshacerme de él. Sin embargo, me gustaría obtener todas las publicaciones que tengan un conjunto de valores meta personalizado específico e insertarlo en el comienzo del contenido de la publicación, luego eliminar el valor meta.

Tengo la sensación de que esta publicación me acerca, ya que he podido para agregar contenido exitosamente al inicio de las publicaciones, pero no he tenido éxito al acceder y agregar el meta valor personalizado que busco. Tampoco estoy seguro de cuándo conectar en WordPress y realizar mis acciones.

¿Alguien tiene alguna sugerencia sobre la mejor manera de hacer esto? Pensé que construiría un complemento simple, lo activaría, lo dejaría hacer su trabajo y luego lo eliminaría.

    
pregunta Luke 28.03.2012 - 19:06

2 respuestas

3

¿Qué pasa con algo como esto en la activación?

function wpa47153_run_once(){

    $posts = get_posts(array('numberposts' => -1) );

    foreach($posts as $p) :  

        $meta = get_post_meta($p->ID, 'meta_key',true);

        if($meta) :

            $my_post = array();
            $my_post['ID'] = $p->ID;
            $my_post['post_content'] = $meta . "<br/>"  . $p->post_content ;

            // Update the post into the database
            wp_update_post( $my_post );
        unset($my_post);

            //remove the meta key
            delete_post_meta($p->ID, 'meta_key');

        endif;

    endforeach; 


}

donde get_posts y get_post_meta se ajustan a tu circunstancia.

    
respondido por el helgatheviking 28.03.2012 - 20:30
1

Preferiría haber publicado esto como un comentario en la publicación de helgatheviking, pero como no tengo reputación en este sitio SE, estoy haciendo una nueva publicación. Siéntase libre de eliminarlo si los administradores no lo encuentran útil.

El ejemplo de Helga funciona de maravilla, pero también debes tener en cuenta que si tienes configurado un controlador de guardado personalizado, di algo parecido a continuación que comprueba si hay meta box en la pantalla de publicación y guarda la actualización, elimina los valores vacíos y luego los de Helga. el script borrará todos los otros meta si no detiene temporalmente el controlador de guardado personalizado. Por ejemplo:

add_action('save_post', 'etm\save_custom_fields');
function save_custom_fields( $postId ) {

    //avoid accidental duplication
    return; //remove this when not using helga's function anylonger

    if( ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) 
    || ( defined( 'DOING_AJAX' ) && DOING_AJAX ) ) 
        return;

    //add your custom meta fields here
    $fields = array( 'meta-key-1', 'meta-key-2', '...' );

    foreach( $fields as $metaName ):

        //keep a flag if it's been updated
        $new = false;
        //get the existing value
        $old = get_post_meta( $postId, $metaName, true );

        //update the flag with the new value
        if ( isset( $_POST[ $metaName ] ) ) {
            $new = $_POST[ $metaName ];
        }

        //add/update or delete the meta
        if( $new && $new != $old ) {
            update_post_meta( $postId, $metaName, $new, $old ); //also acts to add

        } elseif( !$new )  {
            delete_post_meta( $postId, $metaName, $old );
        }

    endforeach;     
}

Hace poco cometí este error en un sitio de desarrollo. Afortunadamente, hice una copia de seguridad de la base de datos antes de ejecutar el script de Helga (que funciona perfectamente por sí solo). Pero, como es probable que no sea el único que use meta scripts personalizados / manejo personalizado de guardado, pensé que este es un recordatorio importante.

    
respondido por el Elliott Post 23.09.2015 - 22:48

Lea otras preguntas en las etiquetas