我很抱歉,因为我意识到以前有人问过这个问题,我相信问题在于wpautop
函数添加了结束p或br标记,但我找到的每个解决方案都不起作用,因此我无法解决该问题。
我正在做:
class my_plugin {
public static function init() {
remove_filter(\'the_content\', \'wpautop\');
add_shortcode(\'myshortcode\', array(__CLASS__, \'my_shortcode\'));
}
public static function my_shortcode() {
/* do stuff here */
ob_start();
include(\'views/file.php\');
return ob_get_clean();
}
}
my_plugin::init();
我也尝试过:
remove_filter( \'the_content\', \'wpautop\' );
add_filter( \'the_content\', \'wpautop\' , 99 );
add_filter( \'the_content\', \'shortcode_unautop\', 100 );
以下是当前视图文件中的内容:
<form method="get" id="search" action="<?= get_permalink() ?>">
<input name="st" id="st" class="text" type="text">
<input id="search" class="submit" value="Search" type="submit">
</form>
下面是渲染的内容:
<form method="get" id="search" action="">
<input name="st" id="st" class="text" type="text"><br>
<input id="search" class="submit" value="Search" type="submit"><br>
</form>
如果我使用原始版本并删除所有换行符,它将正确渲染。问题是,它是原始文件的一个大大简化的版本,如果必须在一行上编辑“视图”,这将使编辑“视图”成为一场噩梦。
如果我没有返回视图内容,而是按照预期的方式对其进行了回显(当然,除了能够在其他内容中正确放置快捷码),那么这是值得的。
此外,这里的do stuff部分只是从请求中获取两个变量和一个API调用来设置视图中使用的变量。
最合适的回答,由SO网友:JSP 整理而成
不确定这是否对其他人有帮助,但问题的原因是主题的自定义格式化程序:
function my_formatter($content) {
$new_content = \'\';
$pattern_full = \'{(\\[raw\\].*?\\[/raw\\])}is\';
$pattern_contents = \'{\\[raw\\](.*?)\\[/raw\\]}is\';
$pieces = preg_split($pattern_full, $content, -1, PREG_SPLIT_DELIM_CAPTURE);
foreach ($pieces as $piece) {
if (preg_match($pattern_contents, $piece, $matches)) {
$new_content .= $matches[1];
} else {
$new_content .= wptexturize(wpautop($piece));
}
}
return $new_content;
}
remove_filter(\'the_content\', \'wpautop\');
remove_filter(\'the_content\', \'wptexturize\');
add_filter(\'the_content\', \'my_formatter\', 99);
FWIW:主题是Avenue(来自ThemeForest),它使用“Pyre”主题框架。另一个使用相同主题的站点没有出现问题的原因是其功能。php文件是作为子主题的一部分重新编写/更改的,不包括短代码。具有上述功能的php文件。
很抱歉浪费你的时间,但我真的很感谢你的时间/回答。