{"id":25379,"date":"2021-06-06T18:00:00","date_gmt":"2021-06-06T15:00:00","guid":{"rendered":"https:\/\/themewp.inform.click\/?p=25379"},"modified":"2021-10-17T20:25:26","modified_gmt":"2021-10-17T17:25:26","slug":"lataa-dynaaminen-sisalto-bootstrap-modaliin-wordpressissa","status":"publish","type":"post","link":"https:\/\/themewp.inform.click\/fi\/lataa-dynaaminen-sisalto-bootstrap-modaliin-wordpressissa\/","title":{"rendered":"Lataa dynaaminen sis\u00e4lt\u00f6 Bootstrap Modaliin WordPressiss\u00e4"},"content":{"rendered":"<p>Bootstrap Modalia k\u00e4ytet\u00e4\u00e4n lis\u00e4\u00e4m\u00e4\u00e4n valintaikkuna verkkosivustoosi. Voit k\u00e4ytt\u00e4\u00e4 Bootstrap Modalia valop\u00f6ytiin, ilmoituksiin ja mukautettuun sis\u00e4lt\u00f6\u00f6n. Viime aikoina ty\u00f6skentelin WordPress-projektissa, jossa halusimme ladata mukautetun sis\u00e4ll\u00f6n dynaamisesti Bootstrap Modaliin. T\u00e4ss\u00e4 artikkelissa tutkitaan, kuinka dynaaminen sis\u00e4lt\u00f6 ladataan Bootstrap Modaliin k\u00e4ytt\u00e4m\u00e4ll\u00e4 Ajaxia WordPressiss\u00e4.<\/p>\n<p>On monia tilanteita, joissa saatat haluta Bootstrap-modeemin, jolla on dynaaminen sis\u00e4lt\u00f6. Otetaan esimerkki WordPress-viesteist\u00e4.<\/p>\n<p>WordPress riippuu l\u00e4hinn\u00e4 postityypeist\u00e4 sis\u00e4ll\u00f6n hallinnassa. WordPressiss\u00e4 pid\u00e4mme yleens\u00e4 yksityiskohtaisen sivun n\u00e4hd\u00e4ksesi viestin. Joissakin tapauksissa sinulla ei ehk\u00e4 kuitenkaan ole tarpeeksi sis\u00e4lt\u00f6\u00e4 viesti\u00e4 varten. Joten sen sijaan, ett\u00e4 n\u00e4yt\u00e4t sis\u00e4lt\u00f6\u00e4 eri sivulla, haluat mieluummin n\u00e4ytt\u00e4\u00e4 sen ponnahdusikkunassa. Sinulla voi olla pari viesti\u00e4, joten jokaisen viestin sis\u00e4ll\u00f6n pit\u00e4isi latautua dynaamisesti ponnahdusikkunassa.<\/p>\n<p>T\u00e4\u00e4lt\u00e4 tulee Bootstrap-tila, jonka avulla voit n\u00e4ytt\u00e4\u00e4 sis\u00e4lt\u00f6\u00e4 viesti\u00e4 kohti loppuk\u00e4ytt\u00e4jille. Se vaatii sinua noudattamaan joitain perusvaiheita opetusohjelman seuraavassa osassa esitetyll\u00e4 tavalla.<\/p>\n<h3>Korosta Bootstrap Style ja JS<\/h3>\n<p>Aloittamiseksi sinun on pit\u00e4nyt sis\u00e4llytt\u00e4\u00e4 Bootstrapin CSS- ja JS-tiedosto WordPress-projektiisi. Aion k\u00e4ytt\u00e4\u00e4 WordPress-standardia tarvittavien JS- ja CSS-tiedostojen sis\u00e4llytt\u00e4miseen. Bootstrap-tiedostojen lis\u00e4ksi lis\u00e4t\u00e4\u00e4n my\u00f6s <code>custom.js<\/code>mihin kirjoitamme JavaScript-logiikan.<\/p>\n<p>Avaa <code>functions.php<\/code>tiedosto ja lis\u00e4\u00e4 siihen alla oleva koodi.<\/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>T\u00e4ss\u00e4 olen Bootstrap-tiedostot suoraan CDN: lt\u00e4. Voit lis\u00e4t\u00e4 sen paikallisesti. S\u00e4\u00e4d\u00e4 polkua vastaavasti, jos teet sen paikallisesti. Voit <code>custom.js<\/code>tiedoston, olen osoitettu oletus Ajax URL WordPress ja nonce.<\/p>\n<h3>Lataa dynaaminen sis\u00e4lt\u00f6 Bootstrap Modaliin WordPressiss\u00e4<\/h3>\n<p>Kuten sanottu, aion ladata postisis\u00e4ll\u00f6n dynaamisesti Bootstrap Modaliin. Oletetaan, ett\u00e4 olet luonut mallin, johon luet viestej\u00e4. Jokaisessa viestiss\u00e4 on painike &#8217;N\u00e4yt\u00e4 lis\u00e4\u00e4&#8217;. Napsauttamalla t\u00e4t\u00e4 painiketta Bootstrap Modalin pit\u00e4isi avautua sis\u00e4ll\u00f6n kanssa.<\/p>\n<p>Sinulla pit\u00e4isi olla oma HTML t\u00e4lle listalle. Sinun tarvitsee vain lis\u00e4t\u00e4 yksi tietoattribuutti ja yhteinen luokka painikkeisiin. Se voi olla kuin alla olevat lausunnot.<\/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>K\u00e4ytt\u00e4j\u00e4n on s\u00e4ilytett\u00e4v\u00e4 arvostettu post-tunnus <code>data-id<\/code>attribuutille. Luokan nimi, jota k\u00e4ytin t\u00e4\u00e4ll\u00e4, on &#8217;view-post&#8217;. Seuraavaksi sinun on lis\u00e4tt\u00e4v\u00e4 Bootstrap Modalin merkint\u00e4 joko mallitiedostoon tai alatunnisteeseen.<\/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>Jos huomaat, pidin modaalisen otsikon ja mallin rungon tyhj\u00e4n\u00e4, jonka lataamme dynaamisesti. M\u00e4\u00e4ritin modaalille id postModal.<\/p>\n<p>Kun joku napsauttaa N\u00e4yt\u00e4 lis\u00e4\u00e4 -painiketta, meid\u00e4n on l\u00e4hetett\u00e4v\u00e4 Ajax-puhelu. Ajax-vastauksessa l\u00e4het\u00e4mme postin otsikon ja sis\u00e4ll\u00f6n, joka sitten liitet\u00e4\u00e4n Modaliin jQuery\u00e4 k\u00e4ytt\u00e4m\u00e4ll\u00e4. Kirjoita siis alla oleva jQuery-koodi <code>custom.js<\/code>tiedostoon.<\/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-puhelu WordPressiss\u00e4<\/h4>\n<p>Yll\u00e4 kirjoitetusta jQuery-koodista se l\u00e4hett\u00e4\u00e4 Ajax-puhelun toiminnolla &#8217;load_post_by_ajax&#8217;. Meid\u00e4n on ilmoitettava t\u00e4m\u00e4 toiminto ja liitett\u00e4v\u00e4 siihen soittomenetelm\u00e4. Soittomenetelm\u00e4ss\u00e4 kirjoitetaan todellinen koodi.<\/p>\n<p>Kirjoita alla oleva koodi <code>functions.php<\/code>tiedostoon.<\/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>Se siit\u00e4! Kokeile t\u00e4t\u00e4 ratkaisua ja n\u00e4et sen lataavan dynaamista sis\u00e4lt\u00f6\u00e4 Bootstrap Modaliin. Haluaisin kuulla ajatuksesi ja ehdotuksesi alla olevassa kommenttiosassa.<\/p>\n<h4>Aiheeseen liittyv\u00e4t artikkelit<\/h4>\n<ul>\n<li><a href=\"https:\/\/themewp.inform.click\/fi\/kuinka-lisata-kuvakentta-taksonomiaan-wordpressissa\/\" title=\"Kuinka lis\u00e4t\u00e4 kuvakentt\u00e4 taksonomiaan WordPressiss\u00e4\" >Kuinka lis\u00e4t\u00e4 kuvakentt\u00e4 taksonomiaan WordPressiss\u00e4<\/a><\/li>\n<li><a href=\"https:\/\/themewp.inform.click\/fi\/kuinka-lahettaa-wordpress-sahkopostia-smtp-palvelimen-avulla\/\" title=\"Kuinka l\u00e4hett\u00e4\u00e4 WordPress-s\u00e4hk\u00f6postia SMTP-palvelimen avulla\" >Kuinka l\u00e4hett\u00e4\u00e4 WordPress-s\u00e4hk\u00f6postia SMTP-palvelimen avulla<\/a><\/li>\n<li><a href=\"https:\/\/themewp.inform.click\/fi\/kuinka-luoda-mukautettu-elementti-widget\/\" title=\"Kuinka luoda mukautettu elementti-widget\" >Kuinka luoda mukautettu elementti-widget<\/a><\/li>\n<\/ul>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/artisansweb.net\" class=\"external external_icon\">artisansweb.net<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Haluatko ladata dynaamista sis\u00e4lt\u00f6\u00e4 Bootstrap Modaliin WordPressiss\u00e4? T\u00e4ss\u00e4 artikkelissa otamme suoran esimerkin WordPress-postista ja -esityksest\u00e4<\/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":[610],"tags":[843],"class_list":["post-25379","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-uncategorized-6","tag-affiai-fi"],"_links":{"self":[{"href":"https:\/\/themewp.inform.click\/fi\/wp-json\/wp\/v2\/posts\/25379","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/themewp.inform.click\/fi\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/themewp.inform.click\/fi\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/fi\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/fi\/wp-json\/wp\/v2\/comments?post=25379"}],"version-history":[{"count":0,"href":"https:\/\/themewp.inform.click\/fi\/wp-json\/wp\/v2\/posts\/25379\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/fi\/wp-json\/wp\/v2\/media\/20329"}],"wp:attachment":[{"href":"https:\/\/themewp.inform.click\/fi\/wp-json\/wp\/v2\/media?parent=25379"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/themewp.inform.click\/fi\/wp-json\/wp\/v2\/categories?post=25379"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/themewp.inform.click\/fi\/wp-json\/wp\/v2\/tags?post=25379"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}