包含内容和短代码的Wordpress do_shortcode在内容之前添加短代码而不是内联

时间:2017-03-19 14:19:19

标签: php wordpress function shortcode

似乎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' );

我希望解析器显示:

需要在*被叫列表之前显示的一些文本。

        
  • 动态添加1
  •     
  • 动态添加2

需要在*被叫列表之后显示的一些文本。

但它改为显示(列表显示在容器内,但在文本内容之前):

        
  • 动态添加1
  •     
  • 动态添加2

需要在*被叫列表之前显示的一些文本。

需要在*被叫列表之后显示的一些文本。

1 个答案:

答案 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();
} ?>