В продолжение статьи о сохранении данных формы в БД в виде публикации в WP, я собираюсь рассказать о том как получить код публикации, со страницы которой была выполнена отправка данных формы.
Находясь внутри обработчика wpcf7_mail_sent, вы не сможете получить код публикации методами вроде get_the_ID(). Технически, мы находимся внутри ajax запроса на системный адрес, начинающийся как:
1 |
/wp-json/contact-form-7/v1/contact-forms/... |
который никак не связан со страницей, где находится форма.
Нам придется опираться на данные, передаваемые $_SERVER[‘HTTP_REFERER’], и по ним уже найти объект WP post. К счастью, в богатом API WP есть нужная функция — get_page_by_path.
К примеру, вы разместили форму на всех страницах публикаций типа ‘products’. Тогда PHP код может выглядеть вот так:
1 2 3 4 5 6 7 |
//создание связи с публикацией $req = parse_url($_SERVER['HTTP_REFERER'], PHP_URL_PATH); if (preg_match('#([^/]*)(/)?$#U', $req, $m)) { $post = get_page_by_path($m[1], OBJECT, 'products'); } else { $post = NULL; } |
Теперь можно сохранить ссылку на post, к примеру, в мета-поле.