似乎do_shortcode()
(以及apply_filters()
)在内容前面添加了短代码而不是内联。我怎么能解决这个问题?
解释:我在帖子中发出了这样的话:
[add_entry_content]
<p>Some text that needs to be displayed *before* the called list.</p>
[add_display_code_list]<!-- the list-content I add -->[/add_display_code_list]
<p>Some text that needs to be displayed *after* the called list.</p>
[/add_entry_content]
我的functions.php包含:
// add_entry_content
function add_entry_content_func( $atts, $content = '' ) { ?>
<div class="entry-content content">
<?php echo apply_filters('the_content', $content); ?>
</div><!-- .entry-content -->
<?php }
add_shortcode( 'add_entry_content', 'add_entry_content_func' );
// add a function to display the code-list
function add_display_code_list_func( $atts, $content = '' ) { ?>
<ul>
<li>Dynamically added 1</li>
<li>Dynamically added 2</li>
</ul>
<?php }
add_shortcode( 'add_display_code_list', 'add_display_code_list_func' );
需要在*被叫列表之前显示的一些文本。
需要在*被叫列表之后显示的一些文本。
需要在*被叫列表之前显示的一些文本。
需要在*被叫列表之后显示的一些文本。
答案 0 :(得分:1)
这是因为您在短代码回调中直接显示HTML。您需要通过短代码返回HTML。可以把它想象成一个WordPress过滤器。这将呈现您的短代码并将其输出到放置它的内容的任何位置。
function add_entry_content_func( $atts, $content = '' ) {
$html = '<div class="entry-content content">';
$html .= apply_filters('the_content', $content);
$html .= '</div>';
return $html;
}
或者尝试使用ob_start();
<?php function add_entry_content_func( $atts, $content = '' ) {
ob_start(); ?>
<div class="entry-content content">
<?php echo apply_filters('the_content', $content); ?>
</div><!-- .entry-content -->
<?php
return ob_get_clean();
} ?>