Esempio di wp_update_post()... come aggiornare the_content in una textarea?

7 lug 2011, 04:28:15
Visualizzazioni: 58.9K
Voti: 12

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

dove stai usando questo codice?

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

all'inizio di content-pt-album.php, dove pt sta per post type. È modellato su twentyeleven.

MTT MTT
7 lug 2011 16:11:53
Tutte le risposte alla domanda 3
0

Puoi sovrascrivere le proprietà di WP_Post e inviarlo a wp_update_post:

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

$post->post_content = "Qualche altro contenuto";

wp_update_post( $post );

Lo trovo più semplice rispetto a un array.

7 apr 2020 08:21:39
1

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.

27 set 2016 22:17:56
Commenti

Utilizzare $post come variabile è probabilmente il tuo problema.

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

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?

24 lug 2011 01:10:10
Commenti

Sì, $post e $post->ID stanno producendo gli output corretti. :)

MTT MTT
24 lug 2011 15:47:02