WordPress使用jQuery / AJAX按需加载PHP插件?

时间:2018-03-24 15:06:22

标签: javascript php jquery ajax wordpress

当我们按下按钮时,我需要使用jQuery / Ajax / PHP加载WordpPress插件短代码, ONLY 。这就是我试过的:

1)我有一个带有按钮和DIV的HTML代码:

$(function() {
  $('.LoadBtn').on('click', function() {

    var url = "http://localhost:8888/studio/ajax.php";
    $.post(url, function(data) {
        $("#PhotoGrid").html(data).show();
    });

  });
});

2)当我按下按钮时,会运行以下jQuery代码。这与PHP文件通信并尝试"插入" DIV的短代码:

echo do_shortcode('[wonderplugin_gridgallery id=1]');

3)PHP代码:

{{1}}

但我遇到了错误。 在jQuery代码中,有一个 html(data)字符串。也许这就是问题,因为短代码不是hmtl而是完整的插件代码?我是PHP新手,写什么以及怎么写?

我在控制台中收到的错误消息:

  • 发送@ jquery.js?ver = 1.11.3:5
  • 发送@ jquery.js?ver = 1.11.3:5
  • ajax @ jquery.js?ver = 1.11.3:5
  • m。(匿名函数)@jquery.js?ver = 1.11.3:5
  • (匿名)@ my-custom.js
  • dispatch @ jquery.js?ver = 1.11.3:4
  • r.handle @ jquery.js?ver = 1.11.3:4

1 个答案:

答案 0 :(得分:2)

从你的earlier post我猜测你的目标是通过延迟画廊的负荷来提高速度排名。这可以通过少量的PHP代码很容易地完成 - 大约25行,但是根据你的评论,我推测你还没有获得这样做的技能水平。然而,你可以使用一个丑陋,低效的技巧来规避这个问题。 jQuery .load() function可用于仅加载HTML文档的片段。

$("#PhotoGrid").load( "<url of page with gallery shortcode>", "<jQuery selector of the gallery HTML" );

服务器将发送完整页面,jQuery .load()函数将使用jQuery选择器从中提取库的HTML,并将其插入“#PhotoGrid”元素。由于服务器构建完整页面并且仅需要库短代码片段,因此效率稍低。要清楚你现在需要两个页面,一个初始页面调用jQuery .load()函数和你的原始页面与库短代码。您的原始页面不会直接显示,而是用作可从中提取图库短代码HTML的源。

事实上,由于原始页面仅用作图库HTML的来源,因此您可以通过使用自定义模板删除页眉,页脚和侧边栏以及仅包含图库短代码的帖子内容来提高效率。您真的只需要正确评估短代码的环境而不需要其他任何东西。如果你这样做,我怀疑这将执行几乎与我接下来建议的解决方案一样有效。

请注意,这并不像加载页面那样低效,因为.js和.css文件只在初始页面加载一次。初始页面还必须加载所有需要的.css和.js文件,因为第二个加载不会加载任何.css或.js文件。

这种技术有一点需要注意。如果原始HTML页面在$(document).ready()处理程序中对库进行了额外处理,那么由于此处理程序仅在文档的初始加载时运行,因此您还需要在该处理程序中执行任何必要的代码。画廊的负荷。

如果您想更有效地执行此操作,则需要编写一些棘手的PHP代码。主要思想是使用AJAX请求加载短代码所在的页面,并使用动作'template_redirect'绕过正常的WordPress模板处理,并将其替换为短代码的评估。请注意,这不是'wp_ajax ...'操作,因为该处理不会在帖子的上下文中完成。