it-swarm.com.de

wp_update_post () Beispiel ... wie aktualisiere ich den_inhalt in einem textarea?

Ich benutze die unten stehende Funktion, um das Post-Meta vom Frontend aus zu aktualisieren. Wie kann ich am besten einen Textbereich hinzufügen, der the_content() mit wp_update_post() aktualisiert?

if ( isset( $_POST['albums'] ) && wp_verify_nonce($_POST['albums'],'update_albums_postmeta') ) 
    { //if nonce check succeeds.
        global $post;
        $postid = $post->ID;
        $data = $_POST['priceone'];
              update_post_meta($postid,'_releasedate',$data);
        $data = $_POST['pricetwo'];
              update_post_meta($postid,'_amazonlink',$data);
    }

-

Bearbeiten:

Dieses Snippet veröffentlicht also Änderungen in der Datenbank. Wenn die Seite jedoch beim Senden aktualisiert wird, wird die alte Funktion the_content() angezeigt. Der Beitrag muss manuell aktualisiert werden, um die Änderungen zu sehen.

Ist mein Snippet fehlerhaft?

if ( isset( $_POST['drw_inventory'] ) && wp_verify_nonce($_POST['drw_inventory'],'update_drw_postmeta') ) 
    { //if nonce check succeeds.
        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 );
    }
6
torinagrippa

Es hängt davon ab, wo Sie dies verwenden. Enthält global $ post den spezifischen Beitrag, den Sie aktualisieren möchten? Ihre Postleitzahl für das Wordpress-Update sieht für mich richtig aus, aber ist die if-Anweisung gültig und liefert $ post-> ID den richtigen int?

1
rocketman27

Ich habe das gleiche Problem. Mein Code befindet sich in der Datei single.php. Ich verwende den Code aus diesem Artikel: Front-End-Post-Bearbeitung mit einem Formular

Nachdem Sie auf Senden geklickt haben, führt der Code in single.phpwp_update_post() aus, wobei die Beitrags-ID zurückgegeben wird. Da dies über eine Vorlagendatei ausgeführt wird, wurde die wp_query bereits ausgefüllt, sodass die Seite weiterhin mit den alten Beitragsdaten gerendert wird. Wenn ich ohne Absenden aktualisiere, werden die neuen Daten ausgefüllt.

Ich bin nicht sicher, ob dies die beste Lösung dafür ist, aber es funktioniert. Nachdem wp_update_post() ausgeführt wurde, überschreibe ich die globale $wp_query-Variable mit derselben Abfrage, die ausgeführt wurde, bevor diese Vorlagendatei aufgerufen wurde.

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);  //resets the global query so updated post data is available.

    } else {
        wp_die("You can't do that");
    }
}

Ich habe versucht, stattdessen wp_reset_postdata() und wp_reset_query() aufzurufen, aber ich vermute, es wird auf eine zwischengespeicherte Kopie zurückgesetzt, da ich immer noch die alten Post-Daten erhalte.

Eine andere funktionierende Lösung war das Abrufen der aktuellen URL mit:

global $wp;
$current_url = home_url(add_query_arg(array(),$wp->request)); 

und dann nach wp_update_post():

wp_redirect($current_url);

Der Code für die $ current_url wurde hier gefunden.

2
jer0dh