I have a CPT that uses ACF to keep track of (among other things) request statuses. Right now, I’m trying to make a filter in the admin panel. I want to get all the possible statuses and display them to the user in a select box. But, I’ve run into an issue. How do I parse the results of my database query in a way that make sense?
I’m using the following to get access to the post where the statuses are kept.
$query = "
SELECT DISTINCT post_content
FROM $wpdb->posts
WHERE post_title LIKE 'request_status'
";
// gets an array of statuses... but only ones that have been used so far.
$statuses = $wpdb->get_row($query, ARRAY_A);
Even though this query works, it returns this. Which is just one long string.
a:13:{s:4:"type";s:6:"select";s:12:"instructions";s:0:"";s:8:"required";i:0;s:17:"conditional_logic";i:0;s:7:"wrapper";a:3:{s:5:"width";s:5:"33.33";s:5:"class";s:0:"";s:2:"id";s:0:"";}s:7:"choices";a:11:{s:0:"";s:0:"";s:8:"Received";s:8:"Received";s:17:"Premature request";s:17:"Premature request";s:23:"Clarification requested";s:23:"Clarification requested";s:11:"In progress";s:11:"In progress";s:8:"Complete";s:8:"Complete";s:17:"Request withdrawn";s:17:"Request withdrawn";s:20:"No records available";s:20:"No records available";s:28:"Denied - Insufficient Detail";s:28:"Denied - Insufficient Detail";s:23:"Denied - Confidential 1";s:23:"Denied - Confidential 1";s:23:"Denied - Confidential 2";s:23:"Denied - Confidential 2";}s:13:"default_value";a:0:{}s:10:"allow_null";i:0;s:8:"multiple";i:0;s:2:"ui";i:0;s:4:"ajax";i:0;s:11:"placeholder";s:0:"";s:13:"return_format";s:5:"value";}
Am I not constructing the query correctly? Is there a different/better way of making this request? Thanks for any help you can offer!
Well – I sort of solved this, but I’m still curious as to how to parse the above string. To get around this I used…
global $wpdb;
$query = "
SELECT DISTINCT post_name
FROM $wpdb->posts
WHERE post_title LIKE 'request_status'
";
$result = $wpdb->get_row($query, ARRAY_N);
$field_object = get_field_object($result[0]);
$status_array = $field_object['choices'];
this gives an array of choices from the field object instead of trying to read them from the database