Je commence par dire: pas un développeur backend php ici.

<form action="" method="POST" id="myForm" autocomplete="off">
    <textarea  name="newContent" class="form-control" rows="10"><?php the_content(); ?></textarea>
    <p class="read-more"><button type="button" class="btn btn-danger">Read More</button></p>
    <input id="update_content" type="submit" value="Update">
    <?php
        $post = array(
            'ID' => $id,
            'post_content' => $_POST['newContent']
        );
        wp_update_post($post, true);
    ?>
</form>

Maintenant que c'est sur la page, donc chaque fois que je la charge, wp_update_post($post, true); est exécuté.

Quelle serait la manière la plus simple d'exécuter cela en cliquant sur <input id="update_content" type="submit" value="Update"> et non à chaque chargement de page?

2
rob.m 23 mai 2018 à 03:43

3 réponses

Meilleure réponse

Tout d'abord, donnez un nom à votre entrée:

<input name="submit" value="Update">

Puis dans votre code, en supposant PHP 7+:

if ('Update' === ($_POST['submit'] ?? false)) {
    wp_update_post($post, true);
}

Comment ça marche: lorsque vous cliquez sur un bouton de type soumettre dans le navigateur, le navigateur regroupe les éléments d'entrée nommés et les envoie sur le fil. Le serveur Web dénoue le message HTTP et les envoie à PHP, ce qui les rend disponibles dans le tableau associatif (aka dictionnaire) nommé $_POST. (Ou si la méthode est GET, alors $_GET). Vous pouvez ensuite vérifier ce tableau pour les clés attendues et leurs valeurs.

En passant, vous n'avez pas strictement besoin de nommer votre bouton. Vous pouvez également faire:

if (count($_POST)) {
    ...
}

Qui affirme qu'il existe au moins une paire clé / valeur dans les données publiées.

Vous pouvez également envisager d'utiliser var_dump('<pre>', $_POST) comme aide au diagnostic.

Enfin, je ne sais pas d'où vient votre $id, mais cela doit également être défini correctement.

1
bishop 23 mai 2018 à 01:47

La solution de @bishop est rapide et facile, mais j'ai pensé ajouter ceci:

$_SERVER['REQUEST_METHOD']

Vous permet de déterminer la méthode de la demande.

if($_SERVER['REQUEST_METHOD']=="POST")
{
 wp_update_post($post, true); 
}

C'est sans doute la "bonne manière", et passerait même si le corps du message est vide, bien que nos réponses soient fonctionnellement les mêmes

2
dGRAMOP 23 mai 2018 à 01:00

Essaye ça:

if ($_SERVER["REQUEST_METHOD"] == "POST") {
    // Put variables and function here
}
0
DonCarlosII 23 mai 2018 à 01:00