使用Underscore.js执行PHP代码段

时间:2019-02-06 01:32:03

标签: php wordpress underscore.js

我目前正在为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

1 个答案:

答案 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>