Advertisement
rAthus

[WordPress] [PHP] enregistrement d'un CPT avec ACF (exemple)

Oct 4th, 2021
1,124
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 3.01 KB | None | 0 0
  1. <?php
  2.    
  3.     // on vérifie qu'un utilisateur est connecté
  4.     $user_id = $_SESSION['user']['user_id'];
  5.     if (!$user_id) {
  6.         die(json_encode(array(
  7.             'error' => "Vous avez été déconnecté, merci de relancer l'application",
  8.         )));
  9.     }
  10.    
  11.     // on récupère les variables POST
  12.     $id_post = htmlspecialchars($_POST['id_post'],ENT_QUOTES)?:0; // n'a une valeur que s'il s'agit d'une édition, si pas de valeur ou valeur=0 alors c'est une création
  13.     $timestamp_livraison = htmlspecialchars($_POST['timestamp_livraison'],ENT_QUOTES);
  14.     $nom_destinataire = htmlspecialchars($_POST['nom_destinataire'],ENT_QUOTES);
  15.     $lat = htmlspecialchars($_POST['lat'],ENT_QUOTES);
  16.     $lng = htmlspecialchars($_POST['lng'],ENT_QUOTES);
  17.     $numero = htmlspecialchars($_POST['numero'],ENT_QUOTES);
  18.     $rue = htmlspecialchars($_POST['rue'],ENT_QUOTES);
  19.     $cp = htmlspecialchars($_POST['cp'],ENT_QUOTES);
  20.     $ville = htmlspecialchars($_POST['ville'],ENT_QUOTES);
  21.     $departement = htmlspecialchars($_POST['departement'],ENT_QUOTES);
  22.     $pays = htmlspecialchars($_POST['pays'],ENT_QUOTES);
  23.     $pays_code = htmlspecialchars($_POST['pays_code'],ENT_QUOTES);
  24.    
  25.     // s'il s'agit d'une édition, on vérifie que l'utilisateur a bien le droit d'éditer ce post
  26.     // ici on utilise un champ ACF "utilisateur" pour vérifier qu'il correspond bien à l'ID de l'utilisateur, mais d'autres méthodes peuvent être envisagées, comme la propriété par auteur native de WP, etc
  27.     if ($id_post) {
  28.         if (get_field('utilisateur', $id_post)!=$user_id) {
  29.             die(json_encode(array(
  30.                 'error' => "Vous avez n'avez pas le droit de modifier ce post",
  31.             )));
  32.         }
  33.     }
  34.    
  35.     // on crée ou on édite le post CTP type "livraison" puis on en récupère l'ID (qui ne change pas dans le cas d'une édition)
  36.     $id_post = wp_insert_post(array(
  37.         'ID' => $id_post,
  38.         'post_type' => 'livraison',
  39.         'post_status' => 'publish',
  40.         'post_title' => 'Livraison '.get_field('nom', $user_id).' '.get_field('prenom', $user_id).' pour '.$nom_destinataire,
  41.     ));
  42.    
  43.     // on met à jours les différents ACF
  44.     update_field('utilisateur', $user_id, $id_post);
  45.     update_field('date', date('Y-m-d', $timestamp_livraison), $id_post); // un ACF type date s'enregistre sous le format 'Y-m-d', un type date et heure serait sous la forme 'Y-m-d H:i:s'
  46.     update_field('nom_destinataire', $nom_destinataire, $id_post);
  47.     update_field('adresse', array( // ACF type Google Maps, voir https://pastebin.com/hjudHjUq
  48.         'address' => $numero.' '.$rue.', '.$cp.' '.$ville.', '.$pays,
  49.         'lat' => $lat,
  50.         'lng' => $lng,
  51.         'street_number' => $numero,
  52.         'street_name' => $rue,
  53.         'post_code' => $cp,
  54.         'city' => $ville,
  55.         'state' => $departement,
  56.         'country' => $pays,
  57.         'country_short' => $pays_code,
  58.     ), $id_post);
  59.    
  60.     // fonction de mesure de la distance entre deux points géographiques, pas utilisée ici mais laissée en exemple car elle peut servir
  61.     function distance($lat1, $lng1, $lat2, $lng2) {
  62.         return rad2deg(acos(sin(deg2rad($lat1))*sin(deg2rad($lat2))+cos(deg2rad($lat1))*cos(deg2rad($lat2))*cos(deg2rad($lng1-$lng2))))*111189.577;
  63.     }
  64.    
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement