Exemplu wp_update_post()... cum să actualizezi the_content într-un textarea?

7 iul. 2011, 04:28:15
Vizualizări: 58.9K
Voturi: 12

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 );
    }
2
Comentarii

unde folosești acest cod?

Hameedullah Khan Hameedullah Khan
7 iul. 2011 08:56:03

la începutul fișierului content-pt-album.php, unde pt înseamnă post type. Este modelat după twentyeleven.

MTT MTT
7 iul. 2011 16:11:53
Toate răspunsurile la întrebare 3
0

Puteți suprascrie proprietățile WP_Post și să le trimiteți la wp_update_post:

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

$post->post_content = "Alt conținut";

wp_update_post( $post );

Mi se pare mai ușor decât utilizarea unui array.

7 apr. 2020 08:21:39
1

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.

27 sept. 2016 22:17:56
Comentarii

Folosirea variabilei $post este probabil problema ta.

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

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?

24 iul. 2011 01:10:10
Comentarii

Da, $post și $post->ID produc rezultatele corecte. :)

MTT MTT
24 iul. 2011 15:47:02