0

我正在尝试将我在 wordpress 中的 php 模板添加到我的 wordpress 登录表单中。

我可以在 wordpess 登录正文中编辑标记的唯一方法是通过 jquery 预先设置。

这是我的 php 模板加载:<?php load_template_part('menu'); ?>

这是我的加载模板过滤器,用于过滤get_template_part();...

// LOAD TEMPLATE PART
function load_template_part($template_name, $part_name=null) {
    ob_start();
    get_template_part($template_name, $part_name);
    $var = preg_replace('/\s\s+/', "", ob_get_contents());
    ob_end_clean();
    return $var;
}

在这个过滤器中,我使用这个删除元素之间的所有空格......preg_replace('/\s\s+/', "", ob_get_contents());


然后,我尝试使用此 jquery 附加此模板部分...

var menu = '<?php echo load_template_part('menu'); ?>';

$("body").prepend(menu);

但是由于我的 php load_template_part 字符串中的换行符,它会出现 javascript 语法错误。

任何人都可以帮助我从 php 字符串中删除换行符,或者建议另一种将我的 php 块安全地放入我体内的方法。

输出来源: https ://gist.github.com/jcranny/5363379

谢谢乔什

4

2 回答 2

2

如果您只是用空格替换所有换行符怎么办?

var menu = '<?php echo preg_replace('/[\r\n]+/',' ',load_template_part('menu')); ?>';

这可能更可靠,虽然我没有测试过(借自这个答案):

var menu = '<?php echo json_encode(load_template_part('menu')); ?>';
于 2013-04-11T13:31:59.967 回答
0

我以前遇到过这个问题,如果那个“模板”包含单引号,你就会遇到问题。我使用的解决方法是对从返回的 html 进行 base64_encode

load_template_part()

然后从 phpjs.org 获取 base64_decode 库。这将确保字符串不包含可能导致 JS 语法错误的非法字符。

例如:

// With Base64 object from phpjs.org
var menu = Base64.decode('<?php echo base64_encode(load_template_part('menu')); ?>');

试一试,对我来说总是很有吸引力。

于 2013-04-11T13:31:46.980 回答