你最初拥有的,echo get_the_content();
不起作用,因为do_shortcode
调用时未应用回调get_the_content()
, 但打电话的时候the_content()
. 这就是为什么标题短代码没有被转换成相应的HTML。
几乎没有理由echo get_the_content()
因为这基本上就是the_content()
做
<div class="thecontent" itemprop="articleBody">
<?php the_content(); ?>
</div>
如果出于任何原因,您的使用可能需要使用
get_the_content()
而不是
the_content()
, 您需要确保
do_shortcode
在打印HTML之前应用回调。所以有几种方法可以解决这个问题。一个(应该有效)是通过应用
the_content
筛选到
get_the_content()
作用
//* In your index.php (or wherever template file)
printf(
\'<div class="thecontent" itemprop="articleBody">%1$s</div>\',
apply_filters( \'the_content\', $content )
);
这基本上就是你在问题中所尝试的。我这样写是因为对我来说,这段代码的作用更清楚。要明确的是,这应该是可行的。因为它不是,所以有一个过滤器连接到
the_content
你的主题或插件会把事情搞砸。确保禁用所有插件,并禁用主题中过滤的任何其他部分
the_content
.
另一种方法是强制短代码执行它们的操作。这就是韦伯莱恩在回答中所说的。我会稍微改变一下,但同样的概念。
//* Again, in a template file
printf(
<div class="thecontent" itemprop="articleBody">%1$s</div>,
do_shortcode( get_the_content() )
);
在函数中也有这样做的方法。php或函数中包含的其他文件。php,甚至一个插件。你能做的就是
the_content
然后在那里添加包装。
//* In your functions.php
add_filter( \'the_content\', \'wpse_283971_the_content\', 1000 );
function wpse_283971_the_content( $content ) {
return sprintf( \'<div class="thecontent" itemprop="articleBody">%1$s</div>\', $content );
}
//* In your template file
the_content();
我猜你是想
echo get_the_content()
而不仅仅是使用
the_content()
是因为
the_content()
不起作用。您需要找到导致以下问题的筛选器
the_content
. 从外观上看,其中一个过滤器忘记了返回其结果。