请给我指一下正确的方向。
在一个页面上,我展示了许多产品。数据来自外部json,该json通过jquery/ajax调用,然后通过称为Handlebar(js)的javascript模板引擎显示数据。
通过单击产品,我想显示一个包含产品详细信息的模式。我正在使用一个使用UIkit的主题,所以我想依赖UIkit的modal功能。在我的本地环境中,这是可能的,通过产品id加载json文件(再次使用ajax/jquery调用)。然而,当试图在wordpress内部实现相同的功能时,模式不会显示json中的任何内容(数据),并且保持为空。
我做的最后一次尝试来自本教程:https://gist.github.com/wondergryphon/ab7647c13c36cefb1a0032f1dea9233a 但这并没有让我一事无成。所以我真的不知道这是不是一条正确的道路。代码如下:
首先是触发模式的HTML模板:
<!-- container where the template gets displayed -->
<div id="container" class="grid"></div>
<!-- handlebars template -->
<script id="template" type="text/x-handlebars-template">
<section class="gallery">
{{#each this}} {{#ads}}
<article class="item {{category}}">
<h3 class="titel">{{brand}}</h3>
<img src={{images.0.small}} />
<p class="text">{{text}}</p>
<!-- button toggling the modal -->
<button id="md_button" data-id="{{id}}" class="uk-button uk-button-danger" uk-toggle="target: #modal-close-default">Load Modal</button>
</article>
{{/ads}} {{/each}}
</section>
</script>
</div>
<!-- modal -->
<div id="dv_modal" class="modal" uk-modal>
<div id="modal_target" class="uk-modal-dialog uk-modal-body">
<button class="uk-modal-close-default" type="button" uk-close></button>
<!-- content in functions.php -->
</div>
然后将此函数设置为函数。php
function fetch_modal_content() {
if ( isset($_REQUEST) ) {
$post_id = $_REQUEST[\'id\'];
?>
<div class="uk-modal-header">
<h2 class="uk-modal-title"></h2>
<?php echo get_the_title($post_id); ?>
</div>
<div class="uk-modal-body">
<?php echo wpautop(get_the_content($post_id)); ?>
</div>
<?php
}
die();
}
add_action( \'wp_ajax_fetch_modal_content\', \'fetch_modal_content\' );
add_action( \'wp_ajax_nopriv_fetch_modal_content\', \'fetch_modal_content\' );
最后一个自定义javascript文件:
var $button = $(\'#md_button\');
var $modal = $(\'#dv_modal\');
var $modal_target = $(\'#modal_target\');
$button.click(function() {
var id = $(this).data(\'id\');
$.ajax({
url: \'https://www.example.json\' + id,
dataType: \'json\',
data: {
\'action\' : \'fetch_modal_content\',
\'id\' : id
},
success:function(data) {
var data = data.T.ads;
//console.log(JSON.stringify(data));
$modal.find(\'.uk-modal-title\').html(data[0].brand);
htmlData = \'<p>\' + data[0].text + \'</p>;
$modal_target.html(data);
$modal.modal(\'show\');
}
});
});