Ejemplo de wp_update_post()... ¿cómo actualizar the_content en un textarea?

7 jul 2011, 04:28:15
Vistas: 58.9K
Votos: 12

Estoy usando la siguiente función para actualizar el post meta desde el frontend. ¿Cuál es la mejor manera de agregar un textarea que actualice the_content() usando wp_update_post()?

if ( isset( $_POST['albums'] ) && wp_verify_nonce($_POST['albums'],'update_albums_postmeta') ) 
    { //si la verificación del nonce es exitosa.
        global $post;
        $postid = $post->ID;
        $data = $_POST['priceone'];
              update_post_meta($postid,'_releasedate',$data);
        $data = $_POST['pricetwo'];
              update_post_meta($postid,'_amazonlink',$data);
    }

-

Edición:

Este código está guardando los cambios en la base de datos, sin embargo cuando la página se recarga al enviar el formulario, se muestra el antiguo the_content(). El post debe ser refrescado manualmente para ver los cambios.

¿Está mal formado mi código?

if ( isset( $_POST['drw_inventory'] ) && wp_verify_nonce($_POST['drw_inventory'],'update_drw_postmeta') ) 
    { //si la verificación del nonce es exitosa.
        global $post;
        $data_content = $_POST['description'];

        $my_post = array();
        $my_post['ID'] = $post->ID;
        $my_post['post_content'] = $data_content;
        wp_update_post( $my_post );
    }
2
Comentarios

¿dónde estás usando este código?

Hameedullah Khan Hameedullah Khan
7 jul 2011 08:56:03

en la parte superior de content-pt-album.php, donde pt es el tipo de post. Está modelado según twentyeleven.

MTT MTT
7 jul 2011 16:11:53
Todas las respuestas a la pregunta 3
0

Puedes sobrescribir las propiedades de WP_Post y enviarlo a wp_update_post:

/** @var WP_Post $post */ 
$post = get_post( 123 );

$post->post_content = "Algún otro contenido";

wp_update_post( $post );

Me parece más fácil que usar un array.

7 abr 2020 08:21:39
1

Me está ocurriendo el mismo problema. Mi código está en el archivo single.php. Estoy usando el código de este artículo: Edición de publicaciones en el front-end usando un formulario

Después de hacer clic en enviar, el código en single.php sí ejecuta wp_update_post() con el ID de la publicación siendo devuelto. Como esto se ejecuta desde un archivo de plantilla, la consulta wp_query ya ha sido poblada, por lo que la página aún se renderiza con los datos antiguos de la publicación. Si actualizo sin enviar, los nuevos datos se cargan.

No estoy seguro si esta es la mejor solución, pero funciona. Después de que se ejecuta wp_update_post(), sobrescribo la variable global $wp_query usando la misma consulta que se ejecutó antes de que se llamara a este archivo de plantilla.

global $wp_query;
if ('POST' == $_SERVER['REQUEST_METHOD'] && !empty($_POST['post_id']) && !empty($_POST['post_title']) && isset($_POST['update_post_nonce']) && isset($_POST['post_content'])) {
    $post_id = $_POST['post_id'];

    $post_type = get_post_type($post_id);
    $capability = ('page' == $post_type) ? 'edit_page' : 'edit_post';
    if (current_user_can($capability, $post_id) && wp_verify_nonce($_POST['update_post_nonce'], 'update_post_' . $post_id)) {
        $post = array(
            'ID' => esc_sql($post_id),
            'post_content' => wp_kses_post($_POST['post_content']),
            'post_title' => wp_strip_all_tags($_POST['post_title'])
        );
        $result = wp_update_post($post, true);

        if (is_wp_error($result)){
            wp_die('Post not saved');
        }
        $wp_query = new WP_Query($wp_query->query);  //resetea la consulta global para que los datos actualizados de la publicación estén disponibles.

    } else {
        wp_die("You can't do that");
    }
}

He intentado llamar a wp_reset_postdata() y wp_reset_query() en su lugar, pero supongo que se está reiniciando a una copia en caché porque todavía obtengo los datos antiguos de la publicación.

Otra solución que funcionó fue obtener la URL actual usando:

global $wp;
$current_url = home_url(add_query_arg(array(),$wp->request)); 

y luego después de wp_update_post():

wp_redirect($current_url);

El código para $current_url fue encontrado aquí.

27 sept 2016 22:17:56
Comentarios

Usar $post como variable probablemente sea tu problema.

Tim Hallman Tim Hallman
26 mar 2020 21:09:04
1

Depende de dónde estés usando esto. ¿La variable global $post te está dando la publicación específica que quieres actualizar? Tu código de actualización de publicación en WordPress se ve correcto para mí, pero ¿la declaración if es válida y $post->ID está devolviendo el entero correcto?

24 jul 2011 01:10:10
Comentarios

Sí, $post y $post->ID están produciendo las salidas correctas. :)

MTT MTT
24 jul 2011 15:47:02