Ejemplo de wp_update_post()... ¿cómo actualizar the_content en un textarea?
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 );
}

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

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?
