当我们按下按钮时,我需要使用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新手,写什么以及怎么写?
我在控制台中收到的错误消息:
答案 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 ...'操作,因为该处理不会在帖子的上下文中完成。