Esempio di wp_update_post()... come aggiornare the_content in una textarea?
Sto usando la funzione qui sotto per aggiornare i post meta dal frontend. Come posso aggiungere nel modo migliore una textarea che aggiorni the_content()
usando wp_update_post()
?
if ( isset( $_POST['albums'] ) && wp_verify_nonce($_POST['albums'],'update_albums_postmeta') )
{ //se il controllo nonce ha successo.
global $post;
$postid = $post->ID;
$data = $_POST['priceone'];
update_post_meta($postid,'_releasedate',$data);
$data = $_POST['pricetwo'];
update_post_meta($postid,'_amazonlink',$data);
}
-
Modifica:
Quindi questo snippet sta salvando le modifiche nel database, tuttavia quando la pagina si aggiorna dopo l'invio viene mostrato il vecchio the_content()
. Il post deve essere aggiornato manualmente per vedere le modifiche.
Il mio snippet è formato male?
if ( isset( $_POST['drw_inventory'] ) && wp_verify_nonce($_POST['drw_inventory'],'update_drw_postmeta') )
{ //se il controllo nonce ha successo.
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 );
}

Sto riscontrando lo stesso problema. Il mio codice si trova nel file single.php
. Sto utilizzando il codice di questo articolo: Modifica dei post in front end utilizzando un modulo
Dopo aver cliccato su invia, il codice in single.php
esegue effettivamente wp_update_post()
con l'ID del post che viene restituito. Poiché questo viene eseguito da un file template, la wp_query è già stata popolata, quindi la pagina viene ancora renderizzata con i vecchi dati del post. Se aggiorno senza inviare, i nuovi dati vengono caricati.
Non sono sicuro che sia la soluzione migliore, ma funziona. Dopo che wp_update_post()
viene eseguito, sovrascrivo la variabile globale $wp_query
utilizzando la stessa query che è stata eseguita prima che questo file template fosse chiamato.
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 non salvato');
}
$wp_query = new WP_Query($wp_query->query); //reimposta la query globale così i dati aggiornati del post sono disponibili.
} else {
wp_die("Non puoi fare questo");
}
}
Ho provato a chiamare wp_reset_postdata()
e wp_reset_query()
invece, ma presumo che stia ripristinando una copia cache perché ottengo ancora i vecchi dati del post.
Un'altra soluzione che ha funzionato è stata ottenere l'URL corrente utilizzando:
global $wp;
$current_url = home_url(add_query_arg(array(),$wp->request));
e poi dopo wp_update_post()
:
wp_redirect($current_url);
Il codice per $current_url è stato trovato qui.

Dipende da dove stai utilizzando questo codice. La variabile globale global $post
ti sta restituendo il post specifico che vuoi aggiornare? Il tuo codice Wordpress per l'aggiornamento del post mi sembra corretto, ma l'istruzione if è valida e $post->ID
sta restituendo l'intero corretto?
