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

Wordpress do_shortcode with content and shortcodes inside adds shortcode before the content instead of inline

do_shortcode()(以及 apply_filters())似乎在内容前面添加了简码而不是内联。我该如何解决这个问题?

解释一下:我在 post:

中调用类似的东西
[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' );

我希望解析器显示如下:

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

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


但它显示的是这个(列表显示在容器内,但在文本内容之前):

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

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


这是因为您直接在短代码回调中显示 HTML。您需要通过短代码 return 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();
} ?>