{"id":473,"date":"2010-07-22T14:50:10","date_gmt":"2010-07-22T14:50:10","guid":{"rendered":"https:\/\/wordpress.org\/plugins-wp\/custom-contact-forms\/"},"modified":"2026-06-19T16:37:44","modified_gmt":"2026-06-19T16:37:44","slug":"custom-contact-forms","status":"publish","type":"plugin","link":"https:\/\/th.wordpress.org\/plugins\/custom-contact-forms\/","author":8603214,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"7.9.1","stable_tag":"7.9.1","tested":"6.9.4","requires":"5.0","requires_php":"7.4","requires_plugins":null,"header_name":"Custom Contact Forms","header_author":"Dmitry Alexander","header_description":"","assets_banners_color":"1b1b1b","last_updated":"2026-06-19 16:37:44","external_support_url":"","external_repository_url":"","donate_link":"https:\/\/oiopublisher.com\/","header_plugin_uri":"https:\/\/oiopublisher.com\/","header_author_uri":"https:\/\/oiopublisher.com\/","rating":3.5,"author_block_rating":0,"active_installs":6000,"downloads":1304504,"num_ratings":171,"support_threads":1,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.0.0":{"tag":"1.0.0","author":"tlovett1","date":"2010-07-22 17:07:32"},"1.0.1":{"tag":"1.0.1","author":"tlovett1","date":"2010-07-22 17:37:35"},"1.1.0":{"tag":"1.1.0","author":"tlovett1","date":"2010-07-25 06:38:07"},"1.1.1":{"tag":"1.1.1","author":"tlovett1","date":"2010-07-27 15:22:21"},"1.1.2":{"tag":"1.1.2","author":"tlovett1","date":"2010-07-28 16:03:41"},"1.1.3":{"tag":"1.1.3","author":"tlovett1","date":"2010-07-30 06:16:06"},"1.2.0":{"tag":"1.2.0","author":"tlovett1","date":"2010-08-01 06:37:55"},"1.2.1":{"tag":"1.2.1","author":"tlovett1","date":"2010-08-01 19:07:04"},"2.0.1":{"tag":"2.0.1","author":"tlovett1","date":"2010-08-04 06:23:39"},"2.0.2":{"tag":"2.0.2","author":"tlovett1","date":"2010-08-04 22:07:30"},"2.0.3":{"tag":"2.0.3","author":"tlovett1","date":"2010-08-06 20:12:29"},"2.1.0":{"tag":"2.1.0","author":"tlovett1","date":"2010-08-07 04:04:16"},"2.2.0":{"tag":"2.2.0","author":"tlovett1","date":"2010-08-08 18:20:48"},"2.2.3":{"tag":"2.2.3","author":"tlovett1","date":"2010-08-18 03:27:13"},"2.2.4":{"tag":"2.2.4","author":"tlovett1","date":"2010-08-18 21:19:09"},"2.2.5":{"tag":"2.2.5","author":"tlovett1","date":"2010-08-19 23:21:24"},"3.0.0":{"tag":"3.0.0","author":"tlovett1","date":"2010-08-25 13:25:08"},"3.0.1":{"tag":"3.0.1","author":"tlovett1","date":"2010-08-26 03:35:50"},"3.0.2":{"tag":"3.0.2","author":"tlovett1","date":"2010-08-26 18:43:31"},"3.1.0":{"tag":"3.1.0","author":"tlovett1","date":"2010-08-28 19:56:49"},"3.1.1":{"tag":"3.1.1","author":"tlovett1","date":"2010-09-01 04:33:16"},"3.1.2":{"tag":"3.1.2","author":"tlovett1","date":"2010-09-01 20:59:53"},"3.5.0":{"tag":"3.5.0","author":"tlovett1","date":"2010-09-03 17:54:47"},"3.5.1":{"tag":"3.5.1","author":"tlovett1","date":"2010-09-05 18:00:52"},"3.5.10":{"tag":"3.5.10","author":"tlovett1","date":"2010-10-14 05:20:59"},"3.5.2":{"tag":"3.5.2","author":"tlovett1","date":"2010-09-06 23:22:17"},"3.5.3":{"tag":"3.5.3","author":"tlovett1","date":"2010-09-07 20:36:24"},"3.5.4":{"tag":"3.5.4","author":"tlovett1","date":"2010-09-12 03:52:47"},"3.5.5":{"tag":"3.5.5","author":"tlovett1","date":"2010-09-14 16:17:56"},"3.5.6":{"tag":"3.5.6","author":"tlovett1","date":"2010-09-18 19:25:30"},"3.5.7":{"tag":"3.5.7","author":"tlovett1","date":"2010-09-22 01:47:55"},"3.5.8":{"tag":"3.5.8","author":"tlovett1","date":"2010-10-03 22:28:28"},"3.5.9":{"tag":"3.5.9","author":"tlovett1","date":"2010-10-08 18:14:12"},"4.0.0":{"tag":"4.0.0","author":"tlovett1","date":"2010-11-02 19:19:12"},"4.0.0.b1":{"tag":"4.0.0.b1","author":"tlovett1","date":"2010-10-07 17:36:28"},"4.0.0.b2":{"tag":"4.0.0.b2","author":"tlovett1","date":"2010-10-08 03:52:04"},"4.0.0.b3":{"tag":"4.0.0.b3","author":"tlovett1","date":"2010-10-12 19:15:54"},"4.0.0.b5":{"tag":"4.0.0.b5","author":"tlovett1","date":"2010-10-26 19:27:11"},"4.0.0.b6":{"tag":"4.0.0.b6","author":"tlovett1","date":"2010-10-27 23:07:48"},"4.0.0.b7":{"tag":"4.0.0.b7","author":"tlovett1","date":"2010-10-28 21:01:52"},"4.0.0.b8":{"tag":"4.0.0.b8","author":"tlovett1","date":"2010-10-30 16:59:52"},"4.0.0.b9":{"tag":"4.0.0.b9","author":"tlovett1","date":"2010-11-02 15:41:21"},"4.0.1":{"tag":"4.0.1","author":"tlovett1","date":"2010-11-04 15:58:22"},"4.0.2":{"tag":"4.0.2","author":"tlovett1","date":"2010-11-07 20:08:55"},"4.0.3":{"tag":"4.0.3","author":"tlovett1","date":"2010-11-30 19:18:40"},"4.0.4":{"tag":"4.0.4","author":"tlovett1","date":"2010-12-02 16:59:12"},"4.0.5":{"tag":"4.0.5","author":"tlovett1","date":"2010-12-09 17:59:09"},"4.0.6":{"tag":"4.0.6","author":"tlovett1","date":"2010-12-10 20:30:33"},"4.0.7":{"tag":"4.0.7","author":"tlovett1","date":"2010-12-19 18:08:17"},"4.0.8":{"tag":"4.0.8","author":"tlovett1","date":"2011-01-02 21:18:40"},"4.0.8.1":{"tag":"4.0.8.1","author":"tlovett1","date":"2011-01-03 19:38:48"},"4.0.9":{"tag":"4.0.9","author":"tlovett1","date":"2011-01-05 19:26:22"},"4.0.9.1":{"tag":"4.0.9.1","author":"tlovett1","date":"2011-01-07 15:58:19"},"4.0.9.2":{"tag":"4.0.9.2","author":"tlovett1","date":"2011-01-24 06:40:59"},"4.5.0":{"tag":"4.5.0","author":"tlovett1","date":"2011-01-24 06:40:59"},"4.5.1":{"tag":"4.5.1","author":"tlovett1","date":"2011-01-24 20:48:12"},"4.5.1.1":{"tag":"4.5.1.1","author":"tlovett1","date":"2011-01-25 20:44:31"},"4.5.1.2":{"tag":"4.5.1.2","author":"tlovett1","date":"2011-01-26 21:05:47"},"4.5.2":{"tag":"4.5.2","author":"tlovett1","date":"2011-01-28 05:21:33"},"4.5.2.1":{"tag":"4.5.2.1","author":"tlovett1","date":"2011-01-31 16:13:19"},"4.5.2.2":{"tag":"4.5.2.2","author":"tlovett1","date":"2011-03-12 21:12:22"},"4.5.2.3":{"tag":"4.5.2.3","author":"tlovett1","date":"2011-03-19 16:15:19"},"4.5.3.0":{"tag":"4.5.3.0","author":"tlovett1","date":"2011-05-21 20:13:41"},"4.5.3.1":{"tag":"4.5.3.1","author":"tlovett1","date":"2011-05-22 15:47:36"},"4.5.3.2":{"tag":"4.5.3.2","author":"tlovett1","date":"2011-05-23 14:58:39"},"4.6.0.0":{"tag":"4.6.0.0","author":"tlovett1","date":"2011-05-28 19:57:55"},"4.6.0.1":{"tag":"4.6.0.1","author":"tlovett1","date":"2011-06-08 15:32:07"},"4.7.0.0":{"tag":"4.7.0.0","author":"tlovett1","date":"2011-08-02 22:13:18"},"4.7.0.1":{"tag":"4.7.0.1","author":"tlovett1","date":"2011-08-05 16:15:07"},"4.7.0.2":{"tag":"4.7.0.2","author":"tlovett1","date":"2011-08-15 22:13:50"},"4.7.0.3":{"tag":"4.7.0.3","author":"tlovett1","date":"2011-08-24 16:06:33"},"4.7.0.4":{"tag":"4.7.0.4","author":"tlovett1","date":"2011-09-01 18:05:56"},"4.7.0.5":{"tag":"4.7.0.5","author":"tlovett1","date":"2011-12-22 17:23:50"},"4.8.0.0":{"tag":"4.8.0.0","author":"tlovett1","date":"2012-01-16 21:33:30"},"5.0.0.0":{"tag":"5.0.0.0","author":"tlovett1","date":"2012-03-20 15:33:47"},"5.0.0.1":{"tag":"5.0.0.1","author":"tlovett1","date":"2012-03-20 20:44:15"},"5.1.0.0":{"tag":"5.1.0.0","author":"tlovett1","date":"2012-07-08 16:12:24"},"5.1.0.1":{"tag":"5.1.0.1","author":"tlovett1","date":"2012-07-18 14:15:18"},"5.1.0.2":{"tag":"5.1.0.2","author":"tlovett1","date":"2013-04-29 03:03:07"},"5.1.0.3":{"tag":"5.1.0.3","author":"tlovett1","date":"2013-04-29 13:45:40"},"5.1.0.4":{"tag":"5.1.0.4","author":"tlovett1","date":"2014-08-04 14:34:13"},"6.0":{"tag":"6.0","author":"tlovett1","date":"2015-01-13 04:54:35"},"6.0.1":{"tag":"6.0.1","author":"tlovett1","date":"2015-01-13 15:20:25"},"6.0.2":{"tag":"6.0.2","author":"tlovett1","date":"2015-01-14 04:28:18"},"6.0.3":{"tag":"6.0.3","author":"tlovett1","date":"2015-01-14 14:53:23"},"6.1":{"tag":"6.1","author":"tlovett1","date":"2015-01-15 05:51:20"},"6.1.1":{"tag":"6.1.1","author":"tlovett1","date":"2015-01-15 15:15:13"},"6.1.2":{"tag":"6.1.2","author":"tlovett1","date":"2015-01-16 04:53:30"},"6.1.3":{"tag":"6.1.3","author":"tlovett1","date":"2015-01-19 01:42:22"},"6.1.4":{"tag":"6.1.4","author":"tlovett1","date":"2015-01-19 01:42:22"},"6.2":{"tag":"6.2","author":"tlovett1","date":"2015-01-19 22:43:53"},"6.2.1":{"tag":"6.2.1","author":"tlovett1","date":"2015-01-20 16:33:48"},"6.2.2":{"tag":"6.2.2","author":"tlovett1","date":"2015-01-21 15:31:16"},"6.2.3":{"tag":"6.2.3","author":"tlovett1","date":"2015-01-21 19:01:08"},"6.3":{"tag":"6.3","author":"tlovett1","date":"2015-01-22 15:37:50"},"6.3.1":{"tag":"6.3.1","author":"tlovett1","date":"2015-01-23 17:37:59"},"6.3.2":{"tag":"6.3.2","author":"tlovett1","date":"2015-01-24 15:14:36"},"6.3.3":{"tag":"6.3.3","author":"tlovett1","date":"2015-01-28 02:51:25"},"6.3.4":{"tag":"6.3.4","author":"tlovett1","date":"2015-01-29 15:50:14"},"6.3.5":{"tag":"6.3.5","author":"tlovett1","date":"2015-01-30 04:44:12"},"6.3.6":{"tag":"6.3.6","author":"tlovett1","date":"2015-02-03 20:30:23"},"6.4":{"tag":"6.4","author":"tlovett1","date":"2015-02-11 03:51:23"},"6.4.1":{"tag":"6.4.1","author":"tlovett1","date":"2015-02-12 04:50:48"},"6.4.10":{"tag":"6.4.10","author":"tlovett1","date":"2015-03-04 05:01:33"},"6.4.11":{"tag":"6.4.11","author":"tlovett1","date":"2015-03-04 20:28:44"},"6.4.12":{"tag":"6.4.12","author":"tlovett1","date":"2015-03-13 05:00:37"},"6.4.2":{"tag":"6.4.2","author":"tlovett1","date":"2015-02-18 15:30:30"},"6.4.3":{"tag":"6.4.3","author":"tlovett1","date":"2015-02-19 03:27:59"},"6.4.4":{"tag":"6.4.4","author":"tlovett1","date":"2015-02-23 02:51:25"},"6.4.5":{"tag":"6.4.5","author":"tlovett1","date":"2015-02-23 05:13:05"},"6.4.6":{"tag":"6.4.6","author":"tlovett1","date":"2015-02-24 15:11:14"},"6.4.7":{"tag":"6.4.7","author":"tlovett1","date":"2015-02-26 04:43:52"},"6.4.8":{"tag":"6.4.8","author":"tlovett1","date":"2015-03-01 05:16:25"},"6.4.9":{"tag":"6.4.9","author":"tlovett1","date":"2015-03-02 05:33:12"},"6.5":{"tag":"6.5","author":"tlovett1","date":"2015-03-18 04:46:25"},"6.5.1":{"tag":"6.5.1","author":"tlovett1","date":"2015-03-27 14:39:13"},"6.6":{"tag":"6.6","author":"tlovett1","date":"2015-03-30 04:07:29"},"6.6.1":{"tag":"6.6.1","author":"tlovett1","date":"2015-04-06 20:52:53"},"6.6.2":{"tag":"6.6.2","author":"tlovett1","date":"2015-04-09 21:46:20"},"6.6.3":{"tag":"6.6.3","author":"tlovett1","date":"2015-04-14 19:01:02"},"6.6.4":{"tag":"6.6.4","author":"tlovett1","date":"2015-04-21 03:46:16"},"6.7.0":{"tag":"6.7.0","author":"tlovett1","date":"2015-04-25 04:44:22"},"6.7.1":{"tag":"6.7.1","author":"tlovett1","date":"2015-05-04 21:35:36"},"6.7.2":{"tag":"6.7.2","author":"tlovett1","date":"2015-05-05 04:22:53"},"6.7.3":{"tag":"6.7.3","author":"tlovett1","date":"2015-05-14 04:57:29"},"6.8":{"tag":"6.8","author":"tlovett1","date":"2015-06-29 14:48:11"},"6.8.1":{"tag":"6.8.1","author":"tlovett1","date":"2015-07-10 04:29:59"},"6.8.2":{"tag":"6.8.2","author":"tlovett1","date":"2015-08-31 13:35:46"},"6.9.0":{"tag":"6.9.0","author":"tlovett1","date":"2015-09-30 04:11:15"},"6.9.1":{"tag":"6.9.1","author":"tlovett1","date":"2015-11-23 15:04:22"},"6.9.2":{"tag":"6.9.2","author":"tlovett1","date":"2015-11-24 20:10:09"},"6.9.3":{"tag":"6.9.3","author":"tlovett1","date":"2015-11-25 01:58:33"},"6.9.4":{"tag":"6.9.4","author":"tlovett1","date":"2015-11-29 05:51:56"},"7.0":{"tag":"7.0","author":"tlovett1","date":"2015-12-08 05:44:52"},"7.0.1":{"tag":"7.0.1","author":"tlovett1","date":"2015-12-08 21:40:02"},"7.0.2":{"tag":"7.0.2","author":"tlovett1","date":"2015-12-09 21:45:27"},"7.0.3":{"tag":"7.0.3","author":"tlovett1","date":"2015-12-12 07:05:16"},"7.1":{"tag":"7.1","author":"tlovett1","date":"2015-12-31 18:11:54"},"7.2":{"tag":"7.2","author":"tlovett1","date":"2016-01-03 05:49:06"},"7.2.1":{"tag":"7.2.1","author":"tlovett1","date":"2016-01-04 00:55:05"},"7.2.2":{"tag":"7.2.2","author":"tlovett1","date":"2016-01-05 05:07:35"},"7.2.3":{"tag":"7.2.3","author":"tlovett1","date":"2016-01-07 15:10:20"},"7.3":{"tag":"7.3","author":"tlovett1","date":"2016-01-08 16:44:16"},"7.3.1":{"tag":"7.3.1","author":"tlovett1","date":"2016-01-10 05:51:34"},"7.3.2":{"tag":"7.3.2","author":"tlovett1","date":"2016-01-11 04:03:39"},"7.4":{"tag":"7.4","author":"tlovett1","date":"2016-01-14 05:44:33"},"7.4.1":{"tag":"7.4.1","author":"tlovett1","date":"2016-01-14 22:45:18"},"7.4.2":{"tag":"7.4.2","author":"tlovett1","date":"2016-01-17 07:01:03"},"7.4.3":{"tag":"7.4.3","author":"tlovett1","date":"2016-01-19 05:51:14"},"7.4.4":{"tag":"7.4.4","author":"tlovett1","date":"2016-01-21 05:41:51"},"7.4.5":{"tag":"7.4.5","author":"tlovett1","date":"2016-01-25 05:09:43"},"7.5":{"tag":"7.5","author":"tlovett1","date":"2016-02-03 06:22:03"},"7.6":{"tag":"7.6","author":"tlovett1","date":"2016-02-18 05:38:40"},"7.7":{"tag":"7.7","author":"tlovett1","date":"2016-03-03 05:03:33"},"7.8":{"tag":"7.8","author":"tlovett1","date":"2016-03-14 05:29:30"},"7.8.1":{"tag":"7.8.1","author":"tlovett1","date":"2016-03-18 18:14:42"},"7.8.2":{"tag":"7.8.2","author":"tlovett1","date":"2016-05-14 10:07:37"},"7.8.3":{"tag":"7.8.3","author":"tlovett1","date":"2016-07-01 14:38:30"},"7.8.4":{"tag":"7.8.4","author":"tlovett1","date":"2016-12-12 15:43:47"},"7.8.5":{"tag":"7.8.5","author":"tlovett1","date":"2017-02-03 06:23:48"},"7.9.0":{"tag":"7.9.0","author":"outlawgt","date":"2026-06-18 22:56:36"},"7.9.1":{"tag":"7.9.1","author":"outlawgt","date":"2026-06-19 16:37:44"}},"upgrade_notice":{"7.9.0":"<p>Major security and compatibility update. Fixes PHP 8+ errors, adds Gutenberg block, Cloudflare Turnstile spam protection, and modern form styling. All existing forms and submissions are preserved \u2014 no data migration needed. Recommended for all users.<\/p>"},"ratings":{"1":"46","2":"8","3":"11","4":"19","5":"87"},"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":1069685,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":1067156,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-772x250.png":{"filename":"banner-772x250.png","revision":1068285,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":{"ccf\/form-block":{"name":"ccf\/form-block","title":"Ccf Form Block"}},"tagged_versions":["1.0.0","1.0.1","1.1.0","1.1.1","1.1.2","1.1.3","1.2.0","1.2.1","2.0.1","2.0.2","2.0.3","2.1.0","2.2.0","2.2.3","2.2.4","2.2.5","3.0.0","3.0.1","3.0.2","3.1.0","3.1.1","3.1.2","3.5.0","3.5.1","3.5.10","3.5.2","3.5.3","3.5.4","3.5.5","3.5.6","3.5.7","3.5.8","3.5.9","4.0.0","4.0.0.b1","4.0.0.b2","4.0.0.b3","4.0.0.b5","4.0.0.b6","4.0.0.b7","4.0.0.b8","4.0.0.b9","4.0.1","4.0.2","4.0.3","4.0.4","4.0.5","4.0.6","4.0.7","4.0.8","4.0.8.1","4.0.9","4.0.9.1","4.0.9.2","4.5.0","4.5.1","4.5.1.1","4.5.1.2","4.5.2","4.5.2.1","4.5.2.2","4.5.2.3","4.5.3.0","4.5.3.1","4.5.3.2","4.6.0.0","4.6.0.1","4.7.0.0","4.7.0.1","4.7.0.2","4.7.0.3","4.7.0.4","4.7.0.5","4.8.0.0","5.0.0.0","5.0.0.1","5.1.0.0","5.1.0.1","5.1.0.2","5.1.0.3","5.1.0.4","6.0","6.0.1","6.0.2","6.0.3","6.1","6.1.1","6.1.2","6.1.3","6.1.4","6.2","6.2.1","6.2.2","6.2.3","6.3","6.3.1","6.3.2","6.3.3","6.3.4","6.3.5","6.3.6","6.4","6.4.1","6.4.10","6.4.11","6.4.12","6.4.2","6.4.3","6.4.4","6.4.5","6.4.6","6.4.7","6.4.8","6.4.9","6.5","6.5.1","6.6","6.6.1","6.6.2","6.6.3","6.6.4","6.7.0","6.7.1","6.7.2","6.7.3","6.8","6.8.1","6.8.2","6.9.0","6.9.1","6.9.2","6.9.3","6.9.4","7.0","7.0.1","7.0.2","7.0.3","7.1","7.2","7.2.1","7.2.2","7.2.3","7.3","7.3.1","7.3.2","7.4","7.4.1","7.4.2","7.4.3","7.4.4","7.4.5","7.5","7.6","7.7","7.8","7.8.1","7.8.2","7.8.3","7.8.4","7.8.5","7.9.0","7.9.1"],"block_files":[],"assets_screenshots":[],"screenshots":{"1":"Drag-and-drop form builder with live preview","2":"Form submissions management","3":"Gutenberg block with server-side preview","4":"Settings page with Turnstile and spam protection options"}},"plugin_section":[],"plugin_tags":[358,5981,2253,2419,214603],"plugin_category":[42],"plugin_contributors":[254805,78227],"plugin_business_model":[],"class_list":["post-473","plugin","type-plugin","status-publish","hentry","plugin_tags-contact-form","plugin_tags-custom-form","plugin_tags-form-builder","plugin_tags-spam-protection","plugin_tags-turnstile","plugin_category-contact-forms","plugin_contributors-outlawgt","plugin_contributors-tlovett1","plugin_committers-outlawgt"],"banners":{"banner":"https:\/\/ps.w.org\/custom-contact-forms\/assets\/banner-772x250.png?rev=1068285","banner_2x":false,"banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/custom-contact-forms\/assets\/icon-128x128.png?rev=1069685","icon_2x":"https:\/\/ps.w.org\/custom-contact-forms\/assets\/icon-256x256.png?rev=1067156","generated":false},"screenshots":[],"raw_content":"<!--section=description-->\n<p>Custom Contact Forms lets you build forms and manage submissions entirely within WordPress. The drag-and-drop builder lives inside the media manager \u2014 no separate admin pages, no learning a new interface. Live previews update as you build, and forms can be inserted via shortcode, Gutenberg block, widget, or PHP function.<\/p>\n\n<p><strong>This plugin is actively maintained.<\/strong> Originally created by Taylor Lovett, it is now maintained by <a href=\"https:\/\/oiopublisher.com\/\">Dmitry Alexander<\/a> as of 2026. Version 7.9.0 is a comprehensive modernization: security hardened, PHP 8+ compatible, with new features and a modern UI.<\/p>\n\n<h4>What You Can Build<\/h4>\n\n<ul>\n<li>Contact forms, quote requests, support forms, event registrations, newsletter signups<\/li>\n<li>Text, paragraph, email (with optional confirmation), name, phone, website, address (US + international), date\/time, dropdowns, checkboxes, radio buttons, file uploads, hidden fields, and HTML blocks<\/li>\n<li>Conditional fields and sections \u2014 show\/hide fields based on other field values<\/li>\n<li>Multiple email notifications per form \u2014 customize recipients, subject, from name, reply-to, and body with field mapping<\/li>\n<li>Post creation on submission \u2014 map form fields to post fields, meta, and taxonomies<\/li>\n<\/ul>\n\n<h4>What's New in 7.9.0<\/h4>\n\n<ul>\n<li><strong>Gutenberg block<\/strong> \u2014 Insert forms directly from the block editor with a live server-side preview<\/li>\n<li><strong>Cloudflare Turnstile<\/strong> \u2014 Modern, invisible, privacy-friendly spam protection (free from Cloudflare)<\/li>\n<li><strong>Anti-spam controls<\/strong> \u2014 Enhanced honeypot, time-based trap, IP rate limiting, disposable email blocking, keyword blacklist<\/li>\n<li><strong>Email diagnostics<\/strong> \u2014 Send test emails, view wp_mail failure log, debug delivery issues<\/li>\n<li><strong>Copy shortcode<\/strong> \u2014 One-click copy from form list, edit screen, and At a Glance panel<\/li>\n<li><strong>Modern CSS<\/strong> \u2014 Clean, responsive form styles with proper focus states, dark\/light theme support<\/li>\n<li><strong>Security hardened<\/strong> \u2014 Full code audit, XSS fixes, SQL injection prevention, input sanitization, capability checks<\/li>\n<li><strong>PHP 8+ compatible<\/strong> \u2014 All deprecation warnings and type errors resolved<\/li>\n<\/ul>\n\n<h4>Features<\/h4>\n\n<ul>\n<li>Drag-and-drop form builder with live preview in the media manager<\/li>\n<li>Gutenberg block, shortcode, widget, and PHP template support<\/li>\n<li>AJAX form submission \u2014 no page reloads<\/li>\n<li>Export submissions to CSV<\/li>\n<li>Import submissions from CSV with automatic column mapping<\/li>\n<li>Import and export forms via WordPress XML<\/li>\n<li>Multiple form themes (light and dark)<\/li>\n<li>Cloudflare Turnstile, reCAPTCHA, and simple captcha options<\/li>\n<li>Restrict forms to logged-in users<\/li>\n<li>Pause forms with a custom message<\/li>\n<li>Customizable completion text or redirect URL<\/li>\n<li>Conditional asset loading \u2014 only load scripts where forms appear<\/li>\n<li>Extensible with hooks, filters, and custom field types<\/li>\n<li>Translations: French, Chinese, German, Danish<\/li>\n<\/ul>\n\n<h4>Quick Start<\/h4>\n\n<ol>\n<li>Go to Forms \u2192 Forms and Submissions<\/li>\n<li>Click \"Manage Form\" on any post or page<\/li>\n<li>Drag fields from the sidebar into the form area<\/li>\n<li>Save and insert into your content<\/li>\n<li>Or use the Gutenberg block: search \"CCF\" in the block inserter<\/li>\n<\/ol>\n\n<h3>External Services<\/h3>\n\n<p>This plugin optionally connects to the following third-party services for spam protection. These services are only used when the site administrator explicitly enables and configures them.<\/p>\n\n<h4>Google reCAPTCHA<\/h4>\n\n<p>When enabled in the form builder, this plugin loads the Google reCAPTCHA widget on form pages and sends form submission verification requests to Google's servers. The user's reCAPTCHA response token is sent to Google for validation. No personal data is sent by the plugin itself \u2014 Google may collect usage data through their widget script.<\/p>\n\n<ul>\n<li>Service provider: Google LLC<\/li>\n<li><a href=\"https:\/\/policies.google.com\/terms\">Terms of Service<\/a><\/li>\n<li><a href=\"https:\/\/policies.google.com\/privacy\">Privacy Policy<\/a><\/li>\n<\/ul>\n\n<h4>Cloudflare Turnstile<\/h4>\n\n<p>When enabled in Forms \u2192 Settings \u2192 Cloudflare Turnstile, this plugin loads the Cloudflare Turnstile widget script on form pages and sends form submission verification requests to Cloudflare's servers. The user's Turnstile response token and the visitor's IP address are sent to Cloudflare for validation.<\/p>\n\n<ul>\n<li>Service provider: Cloudflare, Inc.<\/li>\n<li><a href=\"https:\/\/www.cloudflare.com\/terms\/\">Terms of Service<\/a><\/li>\n<li><a href=\"https:\/\/www.cloudflare.com\/privacypolicy\/\">Privacy Policy<\/a><\/li>\n<\/ul>\n\n<!--section=installation-->\n<ol>\n<li>Upload the <code>custom-contact-forms<\/code> folder to <code>\/wp-content\/plugins\/<\/code><\/li>\n<li>Activate the plugin through the Plugins menu<\/li>\n<li>Go to Forms \u2192 Forms and Submissions to create your first form<\/li>\n<li>Insert forms using the <code>[ccf_form id=\"X\"]<\/code> shortcode or the Gutenberg block<\/li>\n<\/ol>\n\n<h4>Shortcode<\/h4>\n\n<pre><code>[ccf_form id=\"123\"]\n<\/code><\/pre>\n\n<h4>PHP Template Tag<\/h4>\n\n<pre><code>&lt;?php if ( function_exists( 'ccf_output_form' ) ) { ccf_output_form( 123 ); } ?&gt;\n<\/code><\/pre>\n\n<!--section=faq-->\n<dl>\n<dt id=\"how%20do%20i%20add%20cloudflare%20turnstile%3F\"><h3>How do I add Cloudflare Turnstile?<\/h3><\/dt>\n<dd><p>Go to Forms \u2192 Settings and scroll to \"Cloudflare Turnstile.\" Enter your site key and secret key (free from <a href=\"https:\/\/dash.cloudflare.com\/?to=\/:account\/turnstile\">Cloudflare Dashboard<\/a>), enable it, and save. All forms will automatically show the Turnstile challenge.<\/p><\/dd>\n<dt id=\"how%20do%20i%20insert%20a%20form%3F\"><h3>How do I insert a form?<\/h3><\/dt>\n<dd><p>Use the shortcode <code>[ccf_form id=\"X\"]<\/code>, the Gutenberg block (search \"CCF\" or \"Contact Form\"), the CCF widget, or the PHP template tag <code>ccf_output_form( X )<\/code>.<\/p><\/dd>\n<dt id=\"can%20i%20export%20form%20submissions%3F\"><h3>Can I export form submissions?<\/h3><\/dt>\n<dd><p>Yes. Edit any form and click the download icon to export submissions as a CSV file.<\/p><\/dd>\n<dt id=\"can%20i%20import%20submissions%20from%20a%20csv%3F\"><h3>Can I import submissions from a CSV?<\/h3><\/dt>\n<dd><p>Yes. Go to Forms \u2192 Import CSV. Select a form, upload your CSV file, and map the CSV columns to form fields. The importer auto-detects matching columns by name. You can import submissions exported from other form plugins or any CSV source.<\/p><\/dd>\n<dt id=\"does%20this%20plugin%20create%20custom%20database%20tables%3F\"><h3>Does this plugin create custom database tables?<\/h3><\/dt>\n<dd><p>No. All data is stored using WordPress custom post types and post meta. Nothing custom is added to your database schema.<\/p><\/dd>\n<dt id=\"is%20this%20plugin%20compatible%20with%20php%208%3F\"><h3>Is this plugin compatible with PHP 8?<\/h3><\/dt>\n<dd><p>Yes. Version 7.9.0 resolves all PHP 8.0, 8.1, 8.2, 8.3, and 8.4 compatibility issues.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>7.9.1<\/h4>\n\n<ul>\n<li>Privacy: Google reCAPTCHA API is no longer loaded by default \u2014 it now loads only on pages that actually render a reCAPTCHA field, preventing unsolicited third-party requests<\/li>\n<li>Fix: register_setting() calls updated to the modern array syntax with explicit sanitize_callback<\/li>\n<\/ul>\n\n<h4>7.9.0<\/h4>\n\n<ul>\n<li>New maintainer: Dmitry Alexander (outlawgt)<\/li>\n<li>Security: Full top-down code audit and hardening<\/li>\n<li>Security: Fixed XSS vulnerability in form renderer (unescaped REQUEST_URI)<\/li>\n<li>Security: Fixed potential SQL injection in export filter_query()<\/li>\n<li>Security: Added capability checks to export and API delete endpoints<\/li>\n<li>Security: Removed abandoned external Mailchimp subscription (dead URL)<\/li>\n<li>Security: All API permission callbacks return WP_Error for proper REST responses<\/li>\n<li>Security: Sanitized IP address and nonce inputs throughout<\/li>\n<li>New: Gutenberg block with form selector and live server-side preview<\/li>\n<li>New: Cloudflare Turnstile integration (Settings \u2192 Cloudflare Turnstile)<\/li>\n<li>New: Enhanced anti-spam \u2014 improved honeypot, time-based trap, IP rate limiting<\/li>\n<li>New: Disposable email blocking and keyword blacklist<\/li>\n<li>New: Email diagnostics \u2014 test email button and wp_mail failure logging<\/li>\n<li>New: Copy shortcode button in form list, edit screen, and At a Glance panel<\/li>\n<li>New: CSV submission importer (Forms \u2192 Import CSV) with column auto-mapping<\/li>\n<li>New: Modern responsive form CSS with proper focus states and transitions<\/li>\n<li>New: Dark and light theme overrides with modern styling<\/li>\n<li>New: jQuery UI datepicker modern style override<\/li>\n<li>Fix: PHP 8+ compatibility \u2014 resolved all deprecation warnings and type errors<\/li>\n<li>Fix: session_start() checks session_status() and headers_sent()<\/li>\n<li>Fix: (double) cast replaced with proper int math<\/li>\n<li>Fix: Settings page array offset on false when options not yet set<\/li>\n<li>Fix: Null-safe array access in submission CPT formatters<\/li>\n<li>Fix: Import bug \u2014 choices saving to wrong meta key<\/li>\n<li>Fix: show_in_json replaced with show_in_rest<\/li>\n<li>Fix: Removed obsolete vendored WP-API loader<\/li>\n<li>Tweak: ABSPATH guards added to all PHP files<\/li>\n<li>Tweak: date() replaced with wp_date(), parse_url() with wp_parse_url()<\/li>\n<li>Tweak: wp_send_json() replaces echo json_encode() + exit pattern<\/li>\n<\/ul>\n\n<h4>7.8.5<\/h4>\n\n<ul>\n<li>Prevent submissions from being accessible in API<\/li>\n<\/ul>\n\n<h4>7.8.4<\/h4>\n\n<ul>\n<li>Fix WP 4.7 conflict<\/li>\n<\/ul>\n\n<h4>7.8.3<\/h4>\n\n<ul>\n<li>Fix WooCommerce conflict<\/li>\n<\/ul>\n\n<h4>7.8.2<\/h4>\n\n<ul>\n<li>Add $submission to ccf_email_subject filter, correct \"Invalid Date\" issue with datepicker<\/li>\n<li>Fix WooCommerce conflict<\/li>\n<li>Add support for Customize Posts plugin<\/li>\n<\/ul>\n\n<h4>7.8.1<\/h4>\n\n<ul>\n<li>Cache busy form submission URL<\/li>\n<li>Improve field choice UI<\/li>\n<\/ul>\n\n<h4>7.8<\/h4>\n\n<ul>\n<li>Hide form title setting<\/li>\n<li>Reply to notification fields<\/li>\n<li>Activate form notifications by default<\/li>\n<\/ul>\n\n<h4>7.7<\/h4>\n\n<ul>\n<li>New CAPTCHA option<\/li>\n<li>Fix \"0\" choice input bug<\/li>\n<li>Fix empty conditional bug<\/li>\n<li>Reset field renderer bug fixed<\/li>\n<li>Guide user for whitelisting file extensions in file field<\/li>\n<li>Submit class form option<\/li>\n<li>Logged in users only form option<\/li>\n<\/ul>\n\n<h4>7.6<\/h4>\n\n<ul>\n<li>Form duplication<\/li>\n<li>Fix multiple section header bug<\/li>\n<li>Button class field<\/li>\n<\/ul>\n\n<h4>7.5<\/h4>\n\n<ul>\n<li>Conditional fields and sections<\/li>\n<li>[current_date_time] notification variable<\/li>\n<\/ul>","raw_excerpt":"Build custom forms and manage submissions the WordPress way. Gutenberg block, Cloudflare Turnstile, and anti-spam protection.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/th.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/473","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/th.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/th.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/th.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=473"}],"author":[{"embeddable":true,"href":"https:\/\/th.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/outlawgt"}],"wp:attachment":[{"href":"https:\/\/th.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=473"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/th.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=473"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/th.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=473"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/th.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=473"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/th.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=473"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/th.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=473"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}