{"id":29030,"date":"2021-06-06T17:35:00","date_gmt":"2021-06-06T14:35:00","guid":{"rendered":"https:\/\/themewp.inform.click\/?p=29030"},"modified":"2021-10-17T16:26:24","modified_gmt":"2021-10-17T13:26:24","slug":"cargar-contenido-dinamico-en-bootstrap-modal-en-wordpress","status":"publish","type":"post","link":"https:\/\/themewp.inform.click\/es\/cargar-contenido-dinamico-en-bootstrap-modal-en-wordpress\/","title":{"rendered":"Cargar contenido din\u00e1mico en Bootstrap Modal en WordPress"},"content":{"rendered":"<p>Bootstrap Modal se utiliza para agregar di\u00e1logos a su sitio web. Puede usar Bootstrap Modal para cajas de luz, notificaciones y contenido personalizado. Recientemente trabaj\u00e9 en un proyecto de WordPress donde quer\u00edamos cargar contenido personalizado din\u00e1micamente en Bootstrap Modal. En este art\u00edculo, estudiamos c\u00f3mo cargar contenido din\u00e1mico en Bootstrap Modal usando Ajax en WordPress.<\/p>\n<p>Hay muchos escenarios en los que es posible que desee un modal de Bootstrap con contenido din\u00e1mico. Tomemos el ejemplo de las publicaciones de WordPress.<\/p>\n<p>WordPress depende principalmente de los tipos de publicaciones para administrar el contenido. En WordPress, por lo general, mantenemos una p\u00e1gina detallada para ver la publicaci\u00f3n. Pero en algunos casos, es posible que no tenga suficiente contenido para la publicaci\u00f3n. Entonces, en lugar de mostrar el contenido de la publicaci\u00f3n en una p\u00e1gina diferente, prefiere mostrarlo en una ventana emergente. Es posible que tenga un par de publicaciones, por lo que el contenido de cada publicaci\u00f3n debe cargarse din\u00e1micamente en la ventana emergente.<\/p>\n<p>Aqu\u00ed viene el Bootstrap Modal que puede usar para mostrar contenido por publicaci\u00f3n a los usuarios finales. Requiere que siga algunos pasos b\u00e1sicos como se muestra en la siguiente parte de un tutorial.<\/p>\n<h3>Enqueue Bootstrap Style y JS<\/h3>\n<p>Para comenzar, deber\u00eda haber incluido el archivo CSS y JS de Bootstrap en su proyecto de WordPress. Voy a utilizar el est\u00e1ndar de WordPress para incluir los archivos JS y CSS necesarios. Adem\u00e1s de los archivos Bootstrap, tambi\u00e9n estoy agregando <code>custom.js<\/code>d\u00f3nde escribiremos la l\u00f3gica de JavaScript.<\/p>\n<p>Abra su <code>functions.php<\/code>archivo y agregue el c\u00f3digo a continuaci\u00f3n.<\/p>\n<pre><code>function artisansweb_scripts() {\n\u00a0\u00a0\u00a0\u00a0wp_enqueue_style( 'bootstrapcss', 'https:\/\/stackpath.bootstrapcdn.com\/bootstrap\/4.5.2\/css\/bootstrap.min.css', array(), false, 'all' );\n\u00a0\u00a0\u00a0\u00a0\u00a0\n\u00a0\u00a0\u00a0\u00a0wp_register_script('bootstrapjs', 'https:\/\/stackpath.bootstrapcdn.com\/bootstrap\/4.5.2\/js\/bootstrap.min.js', array('jquery'), false, true);\n\u00a0\u00a0\u00a0\u00a0wp_enqueue_script('bootstrapjs');\n\u00a0\n\u00a0\u00a0\u00a0\u00a0wp_register_script('custom-script', get_stylesheet_directory_uri(). '\/js\/custom.js', array('jquery'), false, true);\n\u00a0\u00a0\u00a0\u00a0\/\/ Localize the script with new data\n\u00a0\u00a0\u00a0\u00a0$script_data_array = array(\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'ajaxurl' =&gt; admin_url( 'admin-ajax.php' ),\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'security' =&gt; wp_create_nonce( 'view_post' ),\n\u00a0\u00a0\u00a0\u00a0);\n\u00a0\u00a0\u00a0\u00a0wp_localize_script( 'custom-script', 'blog', $script_data_array );\n\u00a0\u00a0\u00a0\u00a0wp_enqueue_script('custom-script');\n}\nadd_action( 'wp_enqueue_scripts', 'artisansweb_scripts' );<\/code><\/pre>\n<p>Aqu\u00ed, incluyo archivos Bootstrap directamente desde CDN. Es posible que desee agregarlo localmente. Ajuste la ruta en consecuencia si lo est\u00e1 haciendo localmente. Al <code>custom.js<\/code>archivo, le asign\u00e9 la URL Ajax predeterminada de WordPress y un nonce.<\/p>\n<h3>Cargar contenido din\u00e1mico en Bootstrap Modal en WordPress<\/h3>\n<p>Como dije, voy a cargar el contenido de una publicaci\u00f3n de forma din\u00e1mica en Bootstrap Modal. Supongamos que ha creado una plantilla en la que enumera las publicaciones. Cada publicaci\u00f3n tiene un bot\u00f3n &#8216;Ver m\u00e1s&#8217;. Al hacer clic en este bot\u00f3n, Bootstrap Modal deber\u00eda abrirse con el contenido.<\/p>\n<p>Debe tener su propio HTML para este listado. Todo lo que necesita hacer es agregar un atributo de datos y una clase com\u00fan a los botones. Puede ser como las siguientes declaraciones.<\/p>\n<pre><code>&lt;button data-id=\"YOUR_POST_ID\" class=\"view-post\"&gt;&lt;?php _e('View More'); ?&gt;&lt;\/button&gt;\n&lt;button data-id=\"YOUR_POST_ID\" class=\"view-post\"&gt;&lt;?php _e('View More'); ?&gt;&lt;\/button&gt;<\/code><\/pre>\n<p>El usuario debe mantener una identificaci\u00f3n de publicaci\u00f3n respetada para el <code>data-id<\/code>atributo. El nombre de la clase que utilic\u00e9 aqu\u00ed es &#8216;view-post&#8217;. A continuaci\u00f3n, debe agregar un marcado de Bootstrap Modal en su archivo de plantilla o en el pie de p\u00e1gina.<\/p>\n<pre><code>&lt;!-- Modal --&gt;\n&lt;div class=\"modal fade\" id=\"postModal\" tabindex=\"-1\" role=\"dialog\" aria-labelledby=\"postModalLabel\" aria-hidden=\"true\"&gt;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;div class=\"modal-dialog\" role=\"document\"&gt;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;div class=\"modal-content\"&gt;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;div class=\"modal-header\"&gt;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;h5 class=\"modal-title\" id=\"postModalLabel\"&gt;&lt;\/h5&gt;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;button type=\"button\" class=\"close\" data-dismiss=\"modal\" aria-label=\"Close\"&gt;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;span aria-hidden=\"true\"&gt;\u00d7&lt;\/span&gt;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;\/button&gt;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;\/div&gt;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;div class=\"modal-body\"&gt;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;\/div&gt;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;\/div&gt;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;\/div&gt;\n&lt;\/div&gt;<\/code><\/pre>\n<p>Si se da cuenta, mantuve el t\u00edtulo modal y el cuerpo del modelo vac\u00edos, que cargaremos din\u00e1micamente. Asign\u00e9 el id &#8216;postModal&#8217; al Modal.<\/p>\n<p>Cuando alguien hace clic en el bot\u00f3n &#8216;Ver m\u00e1s&#8217;, debemos enviar una llamada Ajax. En la respuesta de Ajax, enviamos el t\u00edtulo de la publicaci\u00f3n y el contenido de la publicaci\u00f3n que luego se agrega en modal usando jQuery. Por lo tanto, escriba el siguiente c\u00f3digo jQuery en el <code>custom.js<\/code>archivo.<\/p>\n<pre><code>jQuery(function($) {\n\u00a0\u00a0\u00a0\u00a0$('body').on('click', '.view-post', function() {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0var data = {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'action': 'load_post_by_ajax',\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'id': $(this).data('id'),\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'security': blog.security\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0};\n\u00a0\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$.post(blog.ajaxurl, data, function(response) {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0response = JSON.parse(response);\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$('#postModal h5#postModalLabel').text(response.title);\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$('#postModal .modal-body').html(response.content);\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$('#postModal').modal({show:true});\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0});\n\u00a0\u00a0\u00a0\u00a0});\n});<\/code><\/pre>\n<h4>Llamada Ajax en WordPress<\/h4>\n<p>Desde el c\u00f3digo jQuery escrito arriba, env\u00eda una llamada Ajax con la acci\u00f3n &#8216;load_post_by_ajax&#8217;. Tenemos que declarar esta acci\u00f3n y adjuntarle un m\u00e9todo de devoluci\u00f3n de llamada. En el m\u00e9todo de devoluci\u00f3n de llamada, se escribir\u00e1 nuestro c\u00f3digo real.<\/p>\n<p>Escriba el siguiente c\u00f3digo en el <code>functions.php<\/code>archivo.<\/p>\n<pre><code>add_action('wp_ajax_load_post_by_ajax', 'load_post_by_ajax_callback');\nadd_action('wp_ajax_nopriv_load_post_by_ajax', 'load_post_by_ajax_callback');\n\u00a0\nfunction load_post_by_ajax_callback() {\n\u00a0\u00a0\u00a0\u00a0check_ajax_referer('view_post', 'security');\n\u00a0\u00a0\u00a0\u00a0$args = array(\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'post_type' =&gt; 'post',\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'post_status' =&gt; 'publish',\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'p' =&gt; $_POST['id'],\n\u00a0\u00a0\u00a0\u00a0);\n\u00a0\n\u00a0\u00a0\u00a0\u00a0$posts = new WP_Query( $args );\n\u00a0\n\u00a0\u00a0\u00a0\u00a0$arr_response = array();\n\u00a0\u00a0\u00a0\u00a0if ($posts-&gt;have_posts()) {\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0while($posts-&gt;have_posts()) {\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$posts-&gt;the_post();\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$arr_response = array(\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'title' =&gt; get_the_title(),\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'content' =&gt; get_the_content(),\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0);\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0wp_reset_postdata();\n\u00a0\u00a0\u00a0\u00a0}\n\u00a0\n\u00a0\u00a0\u00a0\u00a0echo json_encode($arr_response);\n\u00a0\n\u00a0\u00a0\u00a0\u00a0wp_die();\n}<\/code><\/pre>\n<p>\u00a1Eso es! Pruebe esta soluci\u00f3n y ver\u00e1 que carga contenido din\u00e1mico en Bootstrap Modal. Me gustar\u00eda escuchar sus pensamientos y sugerencias en la secci\u00f3n de comentarios a continuaci\u00f3n.<\/p>\n<h4>Art\u00edculos relacionados<\/h4>\n<ul>\n<li><a href=\"https:\/\/themewp.inform.click\/es\/como-agregar-un-campo-de-imagen-a-la-taxonomia-en-wordpress\/\" title=\"C\u00f3mo agregar un campo de imagen a la taxonom\u00eda en WordPress\" >C\u00f3mo agregar un campo de imagen a la taxonom\u00eda en WordPress<\/a><\/li>\n<li><a href=\"https:\/\/themewp.inform.click\/es\/como-enviar-correo-electronico-de-wordpress-usando-el-servidor-smtp\/\" title=\"C\u00f3mo enviar correo electr\u00f3nico de WordPress usando el servidor SMTP\" >C\u00f3mo enviar correo electr\u00f3nico de WordPress usando el servidor SMTP<\/a><\/li>\n<li><a href=\"https:\/\/themewp.inform.click\/es\/como-construir-un-widget-elementor-personalizado\/\" title=\"C\u00f3mo construir un widget Elementor personalizado\" >C\u00f3mo construir un widget Elementor personalizado<\/a><\/li>\n<\/ul>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Fuente de grabaci\u00f3n:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/artisansweb.net\" class=\"external external_icon\">artisansweb.net<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u00bfQuieres cargar contenido din\u00e1mico en Bootstrap Modal en WordPress? En este art\u00edculo, haremos un examen en vivo de la publicaci\u00f3n de WordPress y mostraremos<\/p>\n","protected":false},"author":1,"featured_media":20329,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[606],"tags":[849],"class_list":["post-29030","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-uncategorized-2","tag-affiai-es"],"_links":{"self":[{"href":"https:\/\/themewp.inform.click\/es\/wp-json\/wp\/v2\/posts\/29030","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/themewp.inform.click\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/themewp.inform.click\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/es\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/es\/wp-json\/wp\/v2\/comments?post=29030"}],"version-history":[{"count":0,"href":"https:\/\/themewp.inform.click\/es\/wp-json\/wp\/v2\/posts\/29030\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/es\/wp-json\/wp\/v2\/media\/20329"}],"wp:attachment":[{"href":"https:\/\/themewp.inform.click\/es\/wp-json\/wp\/v2\/media?parent=29030"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/themewp.inform.click\/es\/wp-json\/wp\/v2\/categories?post=29030"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/themewp.inform.click\/es\/wp-json\/wp\/v2\/tags?post=29030"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}