Exemplu wp_update_post()... cum să actualizezi the_content într-un textarea?
Folosesc funcția de mai jos pentru a actualiza post meta din frontend. Cum pot adăuga cel mai bine un textarea care să actualizeze the_content()
folosind wp_update_post()
?
if ( isset( $_POST['albums'] ) && wp_verify_nonce($_POST['albums'],'update_albums_postmeta') )
{ //dacă verificarea nonce are succes.
global $post;
$postid = $post->ID;
$data = $_POST['priceone'];
update_post_meta($postid,'_releasedate',$data);
$data = $_POST['pricetwo'];
update_post_meta($postid,'_amazonlink',$data);
}
-
Editare:
Deci acest fragment salvează modificările în baza de date, însă când pagina se reîncarcă la trimitere, vechiul the_content()
este încă afișat. Articolul trebuie reîmprospătat manual pentru a vedea modificările.
Este fragmentul meu de cod greșit?
if ( isset( $_POST['drw_inventory'] ) && wp_verify_nonce($_POST['drw_inventory'],'update_drw_postmeta') )
{ //dacă verificarea nonce are succes.
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 );
}

Am aceeași problemă. Codul meu se află în fișierul single.php
. Folosesc codul din acest articol: Editarea postărilor în front-end folosind un formular
După apăsarea butonului de trimitere, codul din single.php
rulează funcția wp_update_post()
și ID-ul postării este returnat. Deoarece acest cod rulează dintr-un fișier de șablon, interogarea wp_query a fost deja populată, astfel încât pagina se încarcă cu vechile date ale postării. Dacă reîmprospătez fără a trimite formularul, noile date sunt încărcate.
Nu sunt sigur dacă aceasta este cea mai bună soluție, dar funcționează. După ce wp_update_post()
rulează, suprascriu variabila globală $wp_query
folosind aceeași interogare care a fost rulată înainte de încărcarea acestui fișier de șablon.
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('Postarea nu a fost salvată');
}
$wp_query = new WP_Query($wp_query->query); //resetează interogarea globală pentru a avea acces la datele actualizate.
} else {
wp_die("Nu ai permisiunea să faci asta");
}
}
Am încercat să apelez wp_reset_postdata()
și wp_reset_query()
, dar cred că se resetează la o copie cache, deoarece tot primesc vechile date ale postării.
O altă soluție care a funcționat a fost obținerea URL-ului curent folosind:
global $wp;
$current_url = home_url(add_query_arg(array(),$wp->request));
și apoi după wp_update_post()
:
wp_redirect($current_url);
Codul pentru $current_url a fost găsit aici.

Depinde de unde folosești acest cod. Variabila globală $post
îți oferă postarea specifică pe care dorești să o actualizezi? Codul tău pentru actualizarea postării în Wordpress pare corect, dar este condiția din if
validă și variabila $post->ID
returnează întregul corect?
