Помогите разобраться с ACF
-
Здравствуйте уважаемы разработчики!
Поставил WP 5.0.3
Использую плагины ACF и WPML.
Сайт двуязычныйС помощью модуля ACF добавил поле slug, которое должно быть уникальным для post_id.
В настройках поля нет такого функционала. поггуглив, настолько насколько это возможно пришел к выводу что проверку надо писать самому.В итоге написал вот такой код и добавил его в файл functions.php темы
add_filter('acf/validate_value/name=slug', 'slug_validate_value', 10, 4); add_filter( 'wp_insert_post_data', 'create_directories_by_slug', 10, 2 ); function check_existing_slug($slug){ global $wpdb; $post_id = get_the_ID(); $sql = " SELECT 1 FROM $wpdb->postmeta pm LEFT JOIN $wpdb->posts p ON pm.post_id = p.id WHERE pm.meta_key = 'slug' AND pm.meta_value = '{$slug}' AND p.post_parent != $post_id GROUP BY p.post_parent "; $posts_terms = $wpdb->get_results($sql, ARRAY_A); $count = $wpdb->num_rows; return $count; } function slug_validate_value( $valid, $value, $field, $input ){ if( !$valid ) { return $valid; } $check_slug = check_existing_slug($value); if ($check_slug) { $valid = '123'; } return $valid; } function slug_replace($slug) { $pattern = '#[^0-9\\p{L}]+#ui'; $replacement = '-'; $slug = preg_replace($pattern, $replacement, trim($slug)); $slug = strtolower($slug); return $slug; } function create_directory_by_slug($slug) { $uploads_dir = ABSPATH . '/uploads/'; $dir_name = $uploads_dir . $slug; $languages = wpm_get_languages(); $folders = [ 'description', 'presentation', 'best_practices', 'faces_stories', 'videos', 'photos', 'reports', 'additional_materials' ]; if(!is_dir($dir_name)) { mkdir($dir_name); foreach ($languages as $code => $language) { !is_dir($dir_name . '/' . $code) && mkdir($dir_name . '/' . $code); foreach ($folders as $folder) { !is_dir($dir_name . '/' . $code . '/' . $folder) && mkdir($dir_name . '/' . $code . '/' . $folder); } } return true; } }
Что я хотел получить в итоге?
Я хотел что если пользователь заполнит поле slug которое уже существует в базе, то мне бы выдалось сообщение об ошибке что оно должно быть у никальным и в итоге, скрипт не создал бы мне нужных папок.
Подскажите правильно ли я думаю, и если нет то в какую сторону копать.
Прошу учтите еще то что, это мой первый сайт на WP.
Спасибо всем заранее!
- Тема «Помогите разобраться с ACF» закрыта для новых ответов.