web-dev-qa-db-fra.com

exemple wp_update_post () ... comment mettre à jour the_content dans une zone de texte?

J'utilise la fonction ci-dessous pour mettre à jour la méta de poste depuis le début. Comment puis-je ajouter au mieux une zone de texte qui met à jour the_content() en utilisant wp_update_post() ?

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

-

Modifier:

Ainsi, cet extrait publie des modifications dans la base de données. Toutefois, lorsque la page est actualisée lors de la soumission, l'ancien the_content() est affiché. Le message doit être actualisé manuellement pour voir les modifications.

Mon extrait est-il mal formé?

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

Cela dépend de l'endroit où vous utilisez ceci. Global $ post vous indique-t-il le message que vous souhaitez mettre à jour? Votre code postal de mise à jour Wordpress me convient, mais l’instruction if est-elle valide et $ post-> ID donne-t-il le bon int?

1
rocketman27

Je reçois le même problème. Mon code est dans le fichier single.php. J'utilise le code de cet article: Edition frontale à l'aide d'un formulaire

Après avoir cliqué sur submit, le code dans single.php exécute wp_update_post() avec l'identifiant de publication renvoyé. Comme cela est exécuté à partir d'un fichier de modèle, wp_query a déjà été rempli, de sorte que la page reste toujours avec les anciennes données de publication. Si j'actualise sans soumettre, les nouvelles données sont renseignées.

Je ne suis pas sûr que ce soit la meilleure solution, mais ça marche. Après l'exécution de wp_update_post(), j'écrase la variable globale $wp_query en utilisant la même requête que celle exécutée avant l'appel de ce fichier de modèle.

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");
    }
}

J'ai essayé d'appeler wp_reset_postdata() et wp_reset_query() à la place, mais j'imagine qu'il s'agit d'une réinitialisation pour une copie en cache, car les anciennes données de publication sont toujours disponibles.

Une autre solution qui fonctionnait consistait à obtenir l’URL actuelle en utilisant:

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

et ensuite après wp_update_post():

wp_redirect($current_url);

Le code pour le $ current_url était se trouve ici.

2
jer0dh