Bouton submit current post dans une boucle wp

Eléphanteau du PHP | 11 Messages

21 mai 2023, 19:41

Bonjour,

Je rencontre un petit soucis avec un bouton de type submit qui est dans une boucle foreach.

Je souhaite modifier des post_metas avec ce bouton, mais il faut que l'action ne se fasse que sur l'annonce concernée.

En gros, il faut que je ressorte le current_id de l'annonce...

Sinon je pense peut-être à une action onclick() avec du Javascript....

Comme la page est assez longue, je vous mets les bouts de code concernés

Je vous remercie d'avance

if(current_user_can('administrator'))
{
   $args = array
   (
     'post_type'        => 'vehica_car',
     'posts_per_page' => -1,
     'paged' => $paged,
     'cache_results'  => false,
     'update_post_meta_cache' => false, 
     'update_post_term_cache' => false,
     'post_status' => array('publish', 'pending', 'draft') 
    );
}
else
{                
   // Get all annonces current user
   $args = array 
   (
    'post_type'        => 'vehica_car',
    'posts_per_page'   => -1,
    'cache_results'  => false,
    'author' => $current_user_id,
    'update_post_meta_cache' => false, 
    'update_post_term_cache' => false,
    'post_status' => array('publish', 'pending', 'draft'),
   );
}

$all_current_user_query = new WP_Query( $args );
$all_annonces_user = $all_current_user_query->posts;

echo'

<div class="afs-col-3">
 <div class="afs-garage-listing-box">
  <div class="afs-garage-listing-box-title">
    <h3>Toutes mes annonces</h3>
    <div class="afs-garage-listing-box-title-count">(' . count($all_annonces_user) . ')</div>
   </div>
   <div class="afs-garage-listing-box-content">';
                                             
    // Start loop all annonces
    foreach($all_annonces_user as $annonce)
    {   
     // Infos annonce
     $post_id = $annonce->ID;
     $post_link = get_permalink($post_id);
     $post_title = get_post_meta($post_id, 'vehica_39814', true);
     $auction_modele = get_post_meta($post_id, 'vehica_39815', true);
     $auction_type = get_the_terms($annonce->ID, 'vehica_19636');
     $auction_type_slug = $auction_type[0]->slug; 

     // Car infos                                                    
     $images_gallery = get_post_meta($post_id, 'vehica_19246');
     $first_img_src = wp_get_attachment_image_src($images_gallery[0], 'small');
     $post_boite = get_post_meta($post_id, 'vehica_48484', true);
     $post_km = get_post_meta($post_id, 'vehica_48173', true);
     $post_fuel = get_post_meta($post_id, 'vehica_48489', true);
     $post_imm_date = get_post_meta($post_id, 'vehica_19190', true);
     $post_finitions = get_post_meta($post_id, 'vehica_19193', true);
     $content = wp_trim_words(get_post_field('post_content', $annonce->ID), 8, '...');
                                                           
     echo '
                                                            
     <div class="afs-panel-card">
      <div class="afs-panel-card__image">
       <img src="' . $first_img_src[0] . '" alt="' . $post_title . '">
      </div> 

      <div class="afs-panel-card__details">
       <a href="' . $post_link . '">
        <div class="afs-panel-card__details_title">' . $post_title . ' ' . $auction_modele . ' ' . $post_finitions . '</div>
       </a>

       <div class="afs-panel-card__details-infos">                                                                                                             
        <div class="afs-panel-card__details-infos-item">' . $post_imm_date . '</div>
        <div class="afs-panel-card__details-infos-item">' . $post_km . ' Km</div>';

        if(empty($all_annonces_in_progress) && empty($all_annonces_reserved))
        {
         echo '
                                                                                
         <a href="https://encheres24.ch/panel/?action=edit&amp;id=' . $post_id . '">Modifier</a>

         <form method="post">
          <input type="submit" value="Relancer" name="relancer">
         </form>';
        }
       }
      </div>
     </div>  
    </div>';  
                                                                                                                                        
   }

   </div>
  </div>
</div>';

if(isset($_POST['relancer']))
{
    delete_post_meta( $post_id, 'auction_list');
    delete_post_meta( $post_id, 'auction_winner');
    delete_post_meta( $post_id, 'auction_price_status');
    delete_post_meta( $post_id, 'auction_email_winner_sended');
    delete_post_meta( $post_id, 'auction_email_soon_endend_sended');
    delete_post_meta( $post_id, 'auction_email_soon_sended');

    // set new date
    $now = date('N');        
    
    $next_date = 'mardi';

    $next_date_str = strtotime('next tuesday');
    $next_date_str = date("d.m.Y", $next_date_str);

    update_post_meta($post_id, 'vehica_20836', $next_date_str);
    update_post_meta($post_id, 'vehica_20856', '10:00');
    update_post_meta($post_id, 'auction_status', 'soon');
                                                            
} 



Mammouth du PHP | 2703 Messages

21 mai 2023, 23:38

<form method="post">
<input type="submit" value="Relancer" name="relancer">
</form>
pour chaque ligne, ce n'est pas très utile.
avec un ou plusieurs champs dans le formulaire, hidden si nécessaire, cela sera plus utile.

Avatar du membre
Mammouth du PHP | 1564 Messages

22 mai 2023, 06:18

Je pense qu'il te faut un identifiant dans chacun de tes formulaires pour identifier qui tu veut modifier :
<form method="post">
<input type="hidden" name="post_id" value="<?= $post_id ?>">
<input type="submit" value="Relancer" name="relancer">
</form>
Puis en PHP :
if(isset($_POST['relancer'], $_POST['post_id']))

Eléphanteau du PHP | 11 Messages

23 mai 2023, 09:55

Bonjour two3d,

Je te remercie pour la réponse, cependant même avec un identifiant j'ai encore un soucis.

Lorsque je clique sur le bouton, cela m'actualise seulement le dernier post, et non pas le post concerné...

J'avoue galérer là....

Avatar du membre
Mammouth du PHP | 1564 Messages

23 mai 2023, 10:18

Et si tu clic sur Modifier (lien href avec post_id) ça modifie bien le post souhaité ?