rAthus icon

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

rAthus | PRO | 10/04/21 02:16:58 PM UTC | 0 ⭐ | 1641 👁️ | Never ⏰ | []
PHP |

3.01 KB

|

None

|

0 👍

/

0 👎

<?php
    
    // on vérifie qu'un utilisateur est connecté
    $user_id = $_SESSION['user']['user_id'];
    if (!$user_id) {
        die(json_encode(array(
            'error' => "Vous avez été déconnecté, merci de relancer l'application",
        )));
    }
    
    // on récupère les variables POST
    $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
    $timestamp_livraison = htmlspecialchars($_POST['timestamp_livraison'],ENT_QUOTES);
    $nom_destinataire = htmlspecialchars($_POST['nom_destinataire'],ENT_QUOTES);
    $lat = htmlspecialchars($_POST['lat'],ENT_QUOTES);
    $lng = htmlspecialchars($_POST['lng'],ENT_QUOTES);
    $numero = htmlspecialchars($_POST['numero'],ENT_QUOTES);
    $rue = htmlspecialchars($_POST['rue'],ENT_QUOTES);
    $cp = htmlspecialchars($_POST['cp'],ENT_QUOTES);
    $ville = htmlspecialchars($_POST['ville'],ENT_QUOTES);
    $departement = htmlspecialchars($_POST['departement'],ENT_QUOTES);
    $pays = htmlspecialchars($_POST['pays'],ENT_QUOTES);
    $pays_code = htmlspecialchars($_POST['pays_code'],ENT_QUOTES);
    
    // s'il s'agit d'une édition, on vérifie que l'utilisateur a bien le droit d'éditer ce post
    // 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
    if ($id_post) {
        if (get_field('utilisateur', $id_post)!=$user_id) {
            die(json_encode(array(
                'error' => "Vous avez n'avez pas le droit de modifier ce post",
            )));
        }
    }
    
    // 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)
    $id_post = wp_insert_post(array(
        'ID' => $id_post,
        'post_type' => 'livraison',
        'post_status' => 'publish',
        'post_title' => 'Livraison '.get_field('nom', $user_id).' '.get_field('prenom', $user_id).' pour '.$nom_destinataire,
    ));
    
    // on met à jours les différents ACF
    update_field('utilisateur', $user_id, $id_post);
    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'
    update_field('nom_destinataire', $nom_destinataire, $id_post);
    update_field('adresse', array( // ACF type Google Maps, voir https://pastebin.com/hjudHjUq
        'address' => $numero.' '.$rue.', '.$cp.' '.$ville.', '.$pays,
        'lat' => $lat,
        'lng' => $lng,
        'street_number' => $numero,
        'street_name' => $rue,
        'post_code' => $cp,
        'city' => $ville,
        'state' => $departement,
        'country' => $pays,
        'country_short' => $pays_code,
    ), $id_post);
    
    // fonction de mesure de la distance entre deux points géographiques, pas utilisée ici mais laissée en exemple car elle peut servir
    function distance($lat1, $lng1, $lat2, $lng2) {
        return rad2deg(acos(sin(deg2rad($lat1))*sin(deg2rad($lat2))+cos(deg2rad($lat1))*cos(deg2rad($lat2))*cos(deg2rad($lng1-$lng2))))*111189.577;
    }
    

Comments