web-dev-qa-db-fra.com

Vérifier si le titre du message est unique en tant que critère de boucle

J'essaie de faire un peu apparemment simple de php (sa sortie est vers un champ Gravity Forms, mais c'est fondamentalement sans importance).

J'utilise Gravity Forms pour créer des publications, ce que je peux faire facilement, mais je souhaite que chaque publication ait un titre unique (car c'est ainsi que l'utilisateur navigue).

J'ai réussi à faire en sorte que cela fonctionne pour l'enregistrement en vérifiant si l'identifiant d'enregistrement de l'utilisateur (également le titre de l'article dans cette situation) était déjà utilisé, comme suit:

{// Construit la fonction id utilisateur complète build_id ($ pcode_id, $ assign_id_no) {

 do {
        $cmplt_id = $pcode_id . "-" . number_pad($assigned_id_no, 3);  // Gets postcode string and calls the number padding function to add the leading 0's
         $assigned_id_no++; // Increase assigned_id_no
    }
    while(username_exists($cmplt_id));  // Restart loop if username_exists is true
    return $cmplt_id;

return $cmplt_id;

}

// Prend une chaîne et ajoute le nombre de zéros (ou tout autre caractère placé là-bas) à gauche de la chaîne function number_pad ($ number, $ n) {return str_pad ((int) $ number, $ n, "0", STR_PAD_LEFT ) }}

$ pcode_id est juste un code postal formaté sous forme de chaîne et $ assign_id_no est simplement un numéro de boucle, passe 1 en gros.

Comme vous pouvez le constater, le critère existant est-ce que cela existe, mais pour ma vie, je ne peux pas l'imiter en vérifiant simplement le type de message.

Le plus proche que je suis venu est get_page_by_title () et si c'est null, alors terminez boucle, mais ça ne marche pas:

{function home_patient_id () {$ post_id = $ _GET ['home_id']; $ home_post_code = get_post_meta ($ post_id, "wpcf-home-post-code", true); $ home_post_code = format_id ($ home_post_code); $ home_post_code = build_home_id ($ home_post_code, 1);

return $home_post_code;

}

// Construit la fonction id utilisateur complète build_home_id ($ pcode_id, $ id_affiché) {

 do {
        $cmplt_id = $pcode_id . "-" . number_pad($assigned_id_no, 3);  // Gets postcode string and calls the number padding function to add the leading 0's
         $assigned_id_no++; // Increase assigned_id_no
         $exist = get_page_by_title($cmplt_id);
        }
    while(get_page_by_title($cmplt_id));    // Restart loop if username_exists is true
    return $cmplt_id;

return $cmplt_id;

}}

J'ai également essayé de vérifier si elle renvoie null mais que rien ne fonctionne, je ne reçois rien ou une boucle infinie.

Quelqu'un peut-il s'il vous plaît aider je tire mes cheveux sur cela!

Merci beaucoup.

1
Dave Legassick

Au cas où quelqu'un se demanderait, j'ai réussi à résoudre ce problème avec un pointeur sur l'utilisation de var_dump (). Voici la boucle modifiée.

function build_home_id ($pcode_id, $assigned_id_no) {

//$cmplt_id = $pcode_id . "-" . number_pad($assigned_id_no, 3);  // Gets postcode string and calls the number padding function to add the leading 0's

do {
        $cmplt_id = $pcode_id . "-" . number_pad($assigned_id_no, 3);  // Gets postcode string and calls the number padding function to add the leading 0's
        $assigned_id_no++; // Increase assigned_id_no
        $existing = get_page_by_title($cmplt_id, OBJECT, "patient");
        $existing_post = $existing->post_title;
}
    while($cmplt_id == $existing_post);    // Restart loop if built id matches any already in existance
    return $cmplt_id;

}

Le problème est que get_page_by_title () renvoie un objet et non une chaîne. J'espère que ça aide quelqu'un.

1
Dave Legassick