Checking if Post Title is Unique as Loop Criteria

I’m trying to make a seemingly simple bit of php (it output’s to a Gravity Forms field, but that’s basically irrelevant).

I’m using Gravity Forms to create posts, which I can do easily, however I want each post to have a unique title (as this is how the user navigates).

Read More

I managed to get this working for registration by checking if the user registration id (also the post title in that situation) was already in use, like so:

{
// Builds complete user id
function build_id ($pcode_id, $assigned_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;

}

// Takes a string and add’s however many 0’s (or other character placed there) to the left of the string
function number_pad($number,$n) {
return str_pad((int) $number,$n,”0″,STR_PAD_LEFT);
}
}

$pcode_id is just a formatted post code as a string and $assigned_id_no is simply a loop number, passes 1 basically.

As you can see the while criteria is does this exist, but for the life of me I can’t emulate this by simply checking post type.

The nearest I’ve come is get_page_by_title() and if it’s null then finish else loop, but it doesn’t work:

{
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;

}

// Builds complete user id
function build_home_id ($pcode_id, $assigned_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
         $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;

}
}

I’ve also tried checking if it returns null but nothing is working, I either get nothing or an infinite loop.

Can someone please help I’m pulling my hair out over this!

Many thanks.

Related posts

Leave a Reply

1 comment

  1. In case anyone’s wondering I managed to get this fixed with a pointer about using var_dump(). Here’s the modified loop.

    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;
    
    }
    

    The problem is the get_page_by_title() returns an object not a string. Hope this helps someone.