Как использовать echo do_shortcode для Contact Form 7 в динамически загружаемом php-файле
Я загружаю php-файл, содержащий echo do_shortcode('[contact-form-7 id="568"]');
с помощью jQuery .load()
, но шорткод ничего не возвращает.
Я видел этот вопрос и ответ и понимаю, что do_shortcode()
недоступен: Почему 'do_shortcode' плагина может не работать в AJAX-запросе?
Но я, к сожалению, никак не могу понять, актуально ли это решение для моей ситуации.
Надеюсь, кто-то сможет помочь пролить свет на эту проблему.
Спасибо.
script.js
$.post(themeurl+ 'save_image.php', { base64_image: ProductDataURL }, function(data) {
if(data) {
$( '#popup-download div' ).load( themeurl+ 'downloadform.php' );
}
});
downloadform.php
<?php
if ( function_exists( 'do_shortcode ' ) ) {
echo "do_shortcode существует";
} else {
echo "do_shortcode не существует"; // это выводится
};
echo do_shortcode('[contact-form-7 id="568"]'); // ничего не выводит
?>

Из того, что вы показали, файл downloadform.php не загружает WordPress, поэтому функция do_shortcode() естественно недоступна.
Вам нужно реализовать ваш AJAX, используя эту статью из Codex: http://codex.wordpress.org/AJAX_in_Plugins
Другой вариант, который я бы предложил, — это загрузка контактной формы в скрытый div при первоначальной загрузке страницы, а затем отображение этого скрытого div, когда пользователи нажимают на что-то, что вызывает появление формы. Таким образом, вам вообще не понадобится AJAX.

Спасибо, user2572827. Альтернативный вариант с загрузкой при загрузке страницы не подходит, так как у меня есть динамическое поле в форме, которое обновляется после создания изображения (см. строку 1 кода выше). Так что я читаю и стараюсь как можно лучше понять содержание ссылки, которую вы прислали :)

@CarolineElisa, если вы ищете простой способ создать JSON-эндпоинт в WordPress, ознакомьтесь с этой статьёй:
http://ottopress.com/2010/dont-include-wp-load-please/
В частности, с разделом под заголовком "Right way the second".
