{"id":29176,"date":"2021-06-06T17:26:00","date_gmt":"2021-06-06T14:26:00","guid":{"rendered":"https:\/\/themewp.inform.click\/?p=29176"},"modified":"2021-10-17T04:24:38","modified_gmt":"2021-10-17T01:24:38","slug":"ladda-dynamiskt-innehall-pa-bootstrap-modal-i-wordpress","status":"publish","type":"post","link":"https:\/\/themewp.inform.click\/sv\/ladda-dynamiskt-innehall-pa-bootstrap-modal-i-wordpress\/","title":{"rendered":"Ladda dynamiskt inneh\u00e5ll p\u00e5 Bootstrap Modal i WordPress"},"content":{"rendered":"<p>Bootstrap Modal anv\u00e4nds f\u00f6r att l\u00e4gga till dialog p\u00e5 din webbplats. Du kan anv\u00e4nda Bootstrap Modal f\u00f6r ljusl\u00e5dor, aviseringar och anpassat inneh\u00e5ll. Nyligen arbetade jag med ett WordPress-projekt d\u00e4r vi ville ladda anpassat inneh\u00e5ll dynamiskt p\u00e5 Bootstrap Modal. I den h\u00e4r artikeln studerar vi hur man laddar dynamiskt inneh\u00e5ll i Bootstrap Modal med Ajax i WordPress.<\/p>\n<p>Det finns m\u00e5nga scenarier d\u00e4r du kanske vill ha ett Bootstrap-modal med dynamiskt inneh\u00e5ll. L\u00e5t oss ta exemplet p\u00e5 WordPress-inl\u00e4gg.<\/p>\n<p>WordPress beror mest p\u00e5 inl\u00e4ggstyper f\u00f6r hantering av inneh\u00e5llet. I WordPress brukar vi h\u00e5lla en detaljerad sida f\u00f6r att se inl\u00e4gget. Men i vissa fall kanske du inte har tillr\u00e4ckligt med inneh\u00e5ll f\u00f6r inl\u00e4gget. S\u00e5 ist\u00e4llet f\u00f6r att visa inl\u00e4ggsinneh\u00e5ll p\u00e5 en annan sida, f\u00f6redrar du att visa det i en popup. Du kan ha ett par inl\u00e4gg och varje inl\u00e4ggs inneh\u00e5ll b\u00f6r laddas dynamiskt i popup-f\u00f6nstret.<\/p>\n<p>H\u00e4r kommer Bootstrap Modal som du kan anv\u00e4nda f\u00f6r att visa inneh\u00e5ll per inl\u00e4gg f\u00f6r slutanv\u00e4ndarna. Det kr\u00e4ver att du f\u00f6ljer n\u00e5gra grundl\u00e4ggande steg som visas i n\u00e4sta del av en sj\u00e4lvstudie.<\/p>\n<h3>Enqueue Bootstrap Style och JS<\/h3>\n<p>F\u00f6r att komma ig\u00e5ng borde du ha inkluderat CSS- och JS-filen f\u00f6r Bootstrap i ditt WordPress-projekt. Jag ska anv\u00e4nda WordPress-standarden f\u00f6r att inkludera n\u00f6dv\u00e4ndiga JS- och CSS-filer. F\u00f6rutom Bootstrap-filer l\u00e4gger jag ocks\u00e5 till <code>custom.js<\/code>var vi skriver JavaScript-logiken.<\/p>\n<p>\u00d6ppna din <code>functions.php<\/code>fil och l\u00e4gg till koden nedan i den.<\/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>H\u00e4r inkluderar jag Bootstrap-filer direkt fr\u00e5n CDN. Du kanske vill l\u00e4gga till det lokalt. Justera banan d\u00e4refter om du g\u00f6r det lokalt. Till <code>custom.js<\/code>filen tilldelade jag standard Ajax-webbadressen f\u00f6r WordPress och en nonce.<\/p>\n<h3>Ladda dynamiskt inneh\u00e5ll p\u00e5 Bootstrap Modal i WordPress<\/h3>\n<p>Som sagt ska jag ladda ett inl\u00e4ggsinneh\u00e5ll dynamiskt i Bootstrap Modal. L\u00e5t oss anta att du har skapat en mall d\u00e4r du listar inl\u00e4gg. Varje inl\u00e4gg har knappen &quot;Visa mer&quot;. N\u00e4r du klickar p\u00e5 den h\u00e4r knappen b\u00f6r Bootstrap Modal \u00f6ppnas med inneh\u00e5llet.<\/p>\n<p>Du b\u00f6r ha din egen HTML f\u00f6r den h\u00e4r listan. Allt du beh\u00f6ver g\u00f6ra \u00e4r att l\u00e4gga till ett dataattribut och en gemensam klass till knapparna. Det kan vara som nedanst\u00e5ende uttalanden.<\/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>Anv\u00e4ndaren m\u00e5ste beh\u00e5lla ett respekterat inl\u00e4ggs-id f\u00f6r <code>data-id<\/code>attributet. Klassnamnet jag anv\u00e4nde h\u00e4r \u00e4r &quot;view-post&quot;. D\u00e4refter m\u00e5ste du l\u00e4gga till en markering av Bootstrap Modal antingen i din mallfil eller i sidfoten.<\/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>Om du m\u00e4rker h\u00f6ll jag modaltiteln och modellkroppen tom som vi laddar dynamiskt. Jag tilldelade id: t &#8217;postModal&#8217; till Modal.<\/p>\n<p>N\u00e4r n\u00e5gon klickar p\u00e5 knappen &quot;Visa mer&quot; m\u00e5ste vi skicka ett Ajax-samtal. I Ajax-svaret skickar vi inl\u00e4ggstitel och inl\u00e4ggsinneh\u00e5ll som sedan l\u00e4ggs till i Modal med jQuery. S\u00e5 skriv nedanst\u00e5ende jQuery-kod i <code>custom.js<\/code>filen.<\/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>Ajax Call i WordPress<\/h4>\n<p>Fr\u00e5n jQuery-koden skriven ovan skickar den ett Ajax-samtal med \u00e5tg\u00e4rden &#8217;load_post_by_ajax&#8217;. Vi m\u00e5ste f\u00f6rklara denna \u00e5tg\u00e4rd och bifoga en \u00e5teruppringningsmetod till den. I \u00e5teruppringningsmetoden kommer v\u00e5r faktiska kod att skrivas.<\/p>\n<p>Skriv koden nedan i <code>functions.php<\/code>filen.<\/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>Det \u00e4r allt! Testa den h\u00e4r l\u00f6sningen s\u00e5 ser du den ladda dynamiskt inneh\u00e5ll p\u00e5 Bootstrap Modal. Jag skulle vilja h\u00f6ra dina tankar och f\u00f6rslag i kommentarsektionen nedan.<\/p>\n<h4>relaterade artiklar<\/h4>\n<ul>\n<li><a href=\"https:\/\/themewp.inform.click\/sv\/hur-man-lagger-till-bildfalt-till-taxonomi-i-wordpress\/\" title=\"Hur man l\u00e4gger till bildf\u00e4lt till taxonomi i WordPress\" >Hur man l\u00e4gger till bildf\u00e4lt till taxonomi i WordPress<\/a><\/li>\n<li><a href=\"https:\/\/themewp.inform.click\/sv\/sa-har-skickar-du-wordpress-e-post-med-smtp-server\/\" title=\"S\u00e5 h\u00e4r skickar du WordPress-e-post med SMTP-server\" >S\u00e5 h\u00e4r skickar du WordPress-e-post med SMTP-server<\/a><\/li>\n<li><a href=\"https:\/\/themewp.inform.click\/sv\/hur-man-bygger-anpassad-elementor-widget\/\" title=\"Hur man bygger anpassad Elementor-widget\" >Hur man bygger anpassad Elementor-widget<\/a><\/li>\n<\/ul>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Inspelningsk\u00e4lla:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/artisansweb.net\" class=\"external external_icon\">artisansweb.net<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Vill du ladda dynamiskt inneh\u00e5ll p\u00e5 Bootstrap Modal i WordPress? I den h\u00e4r artikeln tar vi ett liveexempel p\u00e5 WordPress-inl\u00e4gg och show<\/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":[614],"tags":[850],"class_list":["post-29176","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-uncategorized-10","tag-affiai-sv"],"_links":{"self":[{"href":"https:\/\/themewp.inform.click\/sv\/wp-json\/wp\/v2\/posts\/29176","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/themewp.inform.click\/sv\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/themewp.inform.click\/sv\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/sv\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/sv\/wp-json\/wp\/v2\/comments?post=29176"}],"version-history":[{"count":0,"href":"https:\/\/themewp.inform.click\/sv\/wp-json\/wp\/v2\/posts\/29176\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/sv\/wp-json\/wp\/v2\/media\/20329"}],"wp:attachment":[{"href":"https:\/\/themewp.inform.click\/sv\/wp-json\/wp\/v2\/media?parent=29176"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/themewp.inform.click\/sv\/wp-json\/wp\/v2\/categories?post=29176"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/themewp.inform.click\/sv\/wp-json\/wp\/v2\/tags?post=29176"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}