我目前正在为elementor开发扩展程序,发现它们正在使用Underscore.js。我与开发人员联系,以执行wp_query之类的php代码,依此类推,他们以
响应
device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu") #Now send existing model to device. model_ft = model_ft.to(device) #Now send input to device and so on. inputs = inputs.to(device)
仅在编辑器中运行,并且为Underscore template engine(JS),因此PHP在这里不起作用。
我想知道是否有人知道扩展Underscore.JS以任何方式执行php代码的方法?
PHP中的示例代码
content_template
答案 0 :(得分:0)
我认为您误解了这些语言的工作方式。 PHP是在服务器端执行的,然后发送到已经渲染的客户端(浏览器)。每次您要执行PHP时,都必须访问服务器。
另一方面,JavaScript是客户端(浏览器)方面的语言,这意味着它被发送给客户端,并且客户端(浏览器)执行它。
话虽这么说,您可以通过几种方式在JavaScript中“执行” php代码。
第一种方法是在将响应发送给客户端之前执行php,但是将其隐藏起来,直到需要JavaScript为止。这是一种骇客行为,无法扩展,但是在某些情况下可能会起作用。
我猜您将要使用的第二种方法是AJAX。它将在后台向服务器发送请求,而无需重新加载页面。当然,服务器响应请求所需的时间会有所延迟。
这是使用WordPress进行AJAX调用的示例。
后端:
// Add the "fetch_posts" AJAX action.
add_action('wp_ajax_nopriv_fetch_posts', 'fetch_posts');
add_action('wp_ajax_fetch_posts', 'fetch_posts');
function fetch_posts() {
if (isset($_POST['ids'])) {
$html = '';
// set $wp_query using the post ids sent.
while ( $wp_query->have_posts() ) : $wp_query->the_post();
$html .= 'something';
endwhile;
wp_send_json_success($html);
}
}
前端:
<div id="posts-container">
<?php while ( $wp_query->have_posts() ) : $wp_query->the_post();
echo 'something';
endwhile; ?>
</div>
<br/><br/>
<a id="change-posts">Click Here</a>
<script>
$('#change-posts').on('click', function() {
// This is where you get to use the 'fetch_posts' action name that you created above.
data = {
ids: [147, 148, 149],
action: 'fetch_posts'
};
$.ajax({
url: "<?php echo admin_url('admin-ajax.php') ?>",
method: "POST",
data: data
}).done(function(response) {
$('#posts-container').html(response.data);
});
});
</script>