{"id":29056,"date":"2021-06-06T17:37:00","date_gmt":"2021-06-06T14:37:00","guid":{"rendered":"https:\/\/themewp.inform.click\/?p=29056"},"modified":"2021-10-18T03:36:45","modified_gmt":"2021-10-18T00:36:45","slug":"zaladuj-dynamiczna-zawartosc-na-bootstrap-modal-w-wordpress","status":"publish","type":"post","link":"https:\/\/themewp.inform.click\/pl\/zaladuj-dynamiczna-zawartosc-na-bootstrap-modal-w-wordpress\/","title":{"rendered":"Za\u0142aduj dynamiczn\u0105 zawarto\u015b\u0107 na Bootstrap Modal w WordPress"},"content":{"rendered":"<p>Bootstrap Modal s\u0142u\u017cy do dodawania okna dialogowego do Twojej witryny. Mo\u017cesz u\u017cy\u0107 Bootstrap Modal do lightbox\u00f3w, powiadomie\u0144 i niestandardowych tre\u015bci. Ostatnio pracowa\u0142em nad projektem WordPress, w kt\u00f3rym chcieli\u015bmy dynamicznie \u0142adowa\u0107 niestandardowe tre\u015bci na Bootstrap Modal. W tym artykule dowiemy si\u0119, jak za\u0142adowa\u0107 dynamiczn\u0105 zawarto\u015b\u0107 w Bootstrap Modal za pomoc\u0105 Ajax w WordPress.<\/p>\n<p>Istnieje wiele scenariuszy, w kt\u00f3rych mo\u017cesz potrzebowa\u0107 modu Bootstrap z zawarto\u015bci\u0105 dynamiczn\u0105. We\u017amy przyk\u0142ad post\u00f3w WordPress.<\/p>\n<p>WordPress w wi\u0119kszo\u015bci zale\u017cy od typ\u00f3w post\u00f3w do zarz\u0105dzania tre\u015bci\u0105. W WordPress zwykle prowadzimy szczeg\u00f3\u0142ow\u0105 stron\u0119, aby wy\u015bwietli\u0107 post. Ale w niekt\u00f3rych przypadkach mo\u017cesz nie mie\u0107 wystarczaj\u0105cej ilo\u015bci tre\u015bci dla posta. Dlatego zamiast pokazywa\u0107 tre\u015b\u0107 posta na innej stronie, wolisz pokaza\u0107 j\u0105 w wyskakuj\u0105cym okienku. Mo\u017cesz mie\u0107 kilka post\u00f3w, wi\u0119c tre\u015b\u0107 ka\u017cdego posta powinna \u0142adowa\u0107 si\u0119 dynamicznie w wyskakuj\u0105cym okienku.<\/p>\n<p>Oto Bootstrap Modal, kt\u00f3rego mo\u017cesz u\u017cy\u0107 do wy\u015bwietlania tre\u015bci na post u\u017cytkownikom ko\u0144cowym. Wymaga wykonania kilku podstawowych krok\u00f3w, jak pokazano w nast\u0119pnej cz\u0119\u015bci samouczka.<\/p>\n<h3>Enqueue Bootstrap Style i JS<\/h3>\n<p>Na pocz\u0105tek powiniene\u015b do\u0142\u0105czy\u0107 plik CSS i JS Bootstrap do swojego projektu WordPress. U\u017cyj\u0119 standardu WordPress do do\u0142\u0105czania wymaganych plik\u00f3w JS i CSS. Opr\u00f3cz plik\u00f3w Bootstrap dodaj\u0119 te\u017c, <code>custom.js<\/code>gdzie napiszemy logik\u0119 JavaScript.<\/p>\n<p>Otw\u00f3rz sw\u00f3j <code>functions.php<\/code>plik i dodaj do niego poni\u017cszy kod.<\/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>Tutaj do\u0142\u0105czam pliki Bootstrap bezpo\u015brednio z CDN. Mo\u017cesz doda\u0107 go lokalnie. Dostosuj odpowiednio \u015bcie\u017ck\u0119, je\u015bli robisz to lokalnie. Do <code>custom.js<\/code>pliku przypisa\u0142em domy\u015blny adres URL Ajax WordPressa i jednorazowy.<\/p>\n<h3>Za\u0142aduj dynamiczn\u0105 zawarto\u015b\u0107 na Bootstrap Modal w WordPress<\/h3>\n<p>Jak powiedzia\u0142em, zamierzam dynamicznie \u0142adowa\u0107 tre\u015b\u0107 posta w Bootstrap Modal. Za\u0142\u00f3\u017cmy, \u017ce utworzy\u0142e\u015b szablon, w kt\u00f3rym wystawiasz posty. Ka\u017cdy post ma przycisk \u201eWy\u015bwietl wi\u0119cej&quot;. Po klikni\u0119ciu tego przycisku powinien otworzy\u0107 si\u0119 Bootstrap Modal z zawarto\u015bci\u0105.<\/p>\n<p>Powiniene\u015b mie\u0107 w\u0142asny kod HTML dla tego wpisu. Wszystko, co musisz zrobi\u0107, to doda\u0107 jeden atrybut danych i wsp\u00f3ln\u0105 klas\u0119 do przycisk\u00f3w. To mo\u017ce by\u0107 jak poni\u017csze stwierdzenia.<\/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>U\u017cytkownik musi zachowa\u0107 szanowany identyfikator posta dla <code>data-id<\/code>atrybutu. Nazwa klasy, kt\u00f3rej tutaj u\u017cy\u0142em, to \u201eview-post&#8221;. Nast\u0119pnie musisz doda\u0107 znacznik Bootstrap Modal w pliku szablonu lub w stopce.<\/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>Je\u015bli zauwa\u017cysz, pozostawi\u0142em tytu\u0142 modalny i tre\u015b\u0107 modelu puste, kt\u00f3re b\u0119dziemy \u0142adowa\u0107 dynamicznie. Do Modalu przypisa\u0142em id 'postModal&#8217;.<\/p>\n<p>Gdy kto\u015b kliknie przycisk \u201eWy\u015bwietl wi\u0119cej&#8221;, musimy wys\u0142a\u0107 wywo\u0142anie Ajax. W odpowiedzi Ajax wysy\u0142amy tytu\u0142 posta oraz tre\u015b\u0107 posta, kt\u00f3ra nast\u0119pnie do\u0142\u0105czana jest w Modalu za pomoc\u0105 jQuery. Zapisz wi\u0119c poni\u017cszy kod jQuery w <code>custom.js<\/code>pliku.<\/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 w WordPressie<\/h4>\n<p>Z kodu jQuery napisanego powy\u017cej, wysy\u0142a wywo\u0142anie Ajax z akcj\u0105 'load_post_by_ajax&#8217;. Musimy zadeklarowa\u0107 t\u0119 akcj\u0119 i do\u0142\u0105czy\u0107 do niej metod\u0119 wywo\u0142ania zwrotnego. W metodzie wywo\u0142ania zwrotnego zostanie zapisany nasz rzeczywisty kod.<\/p>\n<p>Zapisz poni\u017cszy kod w <code>functions.php<\/code>pliku.<\/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>Ot\u00f3\u017c \u200b\u200bto! Wypr\u00f3buj to rozwi\u0105zanie, a zobaczysz, \u017ce \u0142aduje dynamiczn\u0105 zawarto\u015b\u0107 na Bootstrap Modal. Chcia\u0142bym us\u0142ysze\u0107 wasze przemy\u015blenia i sugestie w sekcji komentarzy poni\u017cej.<\/p>\n<h4>Powi\u0105zane artyku\u0142y<\/h4>\n<ul>\n<li><a href=\"https:\/\/themewp.inform.click\/pl\/jak-dodac-pole-obrazu-do-taksonomii-w-wordpress\/\" title=\"Jak doda\u0107 pole obrazu do taksonomii w WordPress\" >Jak doda\u0107 pole obrazu do taksonomii w WordPress<\/a><\/li>\n<li><a href=\"https:\/\/themewp.inform.click\/pl\/jak-wyslac-e-mail-wordpress-za-pomoca-serwera-smtptp\/\" title=\"Jak wys\u0142a\u0107 e-mail WordPress za pomoc\u0105 serwera SMTPTP\" >Jak wys\u0142a\u0107 e-mail WordPress za pomoc\u0105 serwera SMTPTP<\/a><\/li>\n<li><a href=\"https:\/\/themewp.inform.click\/pl\/jak-zbudowac-niestandardowy-widzet-elementor\/\" title=\"Jak zbudowa\u0107 niestandardowy wid\u017cet Elementor\" >Jak zbudowa\u0107 niestandardowy wid\u017cet Elementor<\/a><\/li>\n<\/ul>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">\u0179r\u00f3d\u0142o nagrywania:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/artisansweb.net\" class=\"external external_icon\">artisansweb.net<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Czy chcesz za\u0142adowa\u0107 dynamiczn\u0105 zawarto\u015b\u0107 na Bootstrap Modal w WordPressie? W tym artykule przyjrzymy si\u0119 przyk\u0142adowi postu i pokazu WordPress na \u017cywo<\/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":[612],"tags":[847],"class_list":["post-29056","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-uncategorized-8","tag-affiai-pl"],"_links":{"self":[{"href":"https:\/\/themewp.inform.click\/pl\/wp-json\/wp\/v2\/posts\/29056","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/themewp.inform.click\/pl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/themewp.inform.click\/pl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/pl\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/pl\/wp-json\/wp\/v2\/comments?post=29056"}],"version-history":[{"count":0,"href":"https:\/\/themewp.inform.click\/pl\/wp-json\/wp\/v2\/posts\/29056\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/pl\/wp-json\/wp\/v2\/media\/20329"}],"wp:attachment":[{"href":"https:\/\/themewp.inform.click\/pl\/wp-json\/wp\/v2\/media?parent=29056"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/themewp.inform.click\/pl\/wp-json\/wp\/v2\/categories?post=29056"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/themewp.inform.click\/pl\/wp-json\/wp\/v2\/tags?post=29056"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}