Home › Forums › Backend Issues (wp-admin) › Restrict meta value to only be assigned once › Reply To: Restrict meta value to only be assigned once
Running into a brick wall trying to get the code working at the level you outlined in the original topic. (For it to validate across the whole post type).
I have created a test field called ‘Validation Test’ with the name ‘test’.
I am able to get the post ID to auto generate as you outlined. I have inspected the field to obtain its field key, to which I have then referenced in the necessary places in the code.
I have also made sure that the filters are referencing the correct field i.e.
load_value is using the field name=hidden_post_id (post id field)
and
validate_value is using name=test (validation test field name)
Scratching my head as to why it won’t valid, I am continuing to try and prod around to get to the bottom of this.
Is there anything obvious in my code that you can see? (I left out the ‘hide field’ code snippet you outlined in the original topic)
//Auto fill in post id
add_filter('acf/load_field/name=hidden_post_id', 'make_hidden_post_id_readonly');
function make_field_readonly($field) {
// sets readonly attribute for field
$field['readonly'] = 1;
return field;
}
add_filter('acf/load_value/name=hidden_post_id', 'set_hidden_post_id_value', 10, 3);
function set_hidden_post_id_value($value, $post_id, $field) {
// set the value of the field to the current post id
return $post_id;
}
//Validate field
add_filter('acf/validate_value/name=test', 'require_unique', 10, 4);
function require_unique($valid, $value, $field, $input) {
if (!$valid) {
return $valid;
}
// get the post id
// using field key of post id field
$post_id = $_POST['acf']['field_57765d437d860'];
// query existing posts for matching value
$args = array(
'post_type' => 'knowledge-base',
'posts_per_page' => 1, // only need to see if there is 1
'post_status' => 'publish, draft, trash',
'post__not_in' => array($post_id),
'meta_query' => array(
array(
'key' => $field['test'],
'value' => $value
)
)
);
$query = new WP_Query($args);
if (count($query->posts)){
$valid = 'This Value is not Unique';
}
return $valid;
}
Thanks
Welcome to the Advanced Custom Fields community forum.
Browse through ideas, snippets of code, questions and answers between fellow ACF users
Helping others is a great way to earn karma, gain badges and help ACF development!
Plugin boilerplates can do some of the heavy lifting during initial development. We look at four options to speed up your plugin creation. https://t.co/ZtMsdBxAHw
— Advanced Custom Fields (@wp_acf) June 5, 2023
© 2023 Advanced Custom Fields.
We use cookies to offer you a better browsing experience, analyze site traffic and personalize content. Read about how we use cookies and how you can control them in our Cookie Policy. If you continue to use this site, you consent to our use of cookies.