Как динамически загружать контент в тело модального окна Bootstrap?

Я нашел этот ответ на Stack Overflow , ответьте на этот точный вопрос.

Я немного изменил его, потому что я использую button а не anchor :

 jQuery( ".modal" ).on( "show.bs.modal", function ( e ) { var target = jQuery( e.relatedTarget ).attr( "data-target" ).replace( "#", "" ); var modal_ids = [ "modal-request-estimate", "modal-schedule-appointment", "modal-rate-review" ]; if ( modal_ids.indexOf( target ) == - 1 ) { return false; } jQuery( this ).find( ".modal-body" ).load( location.href + "?modal=" + target ); } ); 

Если затем добавить функцию обратного вызова PHP для запуска на template_redirect , чтобы проверить $_GET[ 'modal' ] и вывести правильное содержимое при действительных условиях.

Мой обратный вызов PHP выглядит следующим образом:

 add_action( 'template_redirect', function () { $modal_id = null; if ( isset( $_GET['modal'] ) ) { $modal_id = filter_var( $_GET['modal'], FILTER_SANITIZE_STRING ); } if ( ! $modal_id ) { return false; } echo render_form( $modal_id ); return true; } ); 

Примечание: render_form(); это очень простая функция, которая выводит только стандартную входную форму HTML.

Просто чтобы быть ясным: я не всегда записываю свои функции обратного вызова анонимно. Я сделал это просто для простоты задавать этот вопрос.

На этом этапе: при нажатии кнопки появляется модальное окно, форма отображается в теле модального окна. Тем не менее, шаблон всего веб-сайта также выводится в модальное окно.

Как мне получить ТОЛЬКО вывод формы в тело модала, а не шаблон сайта ENTIRE?

Я считаю, что правильное решение состоит в том, чтобы форма была встроена в страницу. В большой схеме вещей дополнительный html bloat – это ничто, когда вы сравниваете его со всеми изображениями и JS, которые вы, вероятно, будете обслуживать.

Что касается AJAX, в wordpress есть только два хороших решения: конечная точка AJAX или конечная точка JSON (предпочтительно вторая), любая попытка использовать иерархию шаблонов, хотя может быть успешной в конце, будет тяжелой битвой против все крючки верхнего и нижнего колонтитула и вызывают постоянную головную боль обслуживания.

Если по какой-либо причине конечная точка JSON не может быть использована, вы остаетесь с шаблоном страницы, который не вызывает никаких перехватов WordPress. Вы можете вручную создать такую ​​«страницу формы» или сделать это во время выполнения (активация плагина / темы). Еще одна дополнительная работа, если вы хотите, если хотите скрыть такую ​​страницу из Google, которая будет зависеть от типа плагина SEO, который вы используете.