包含内容和简码的 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' );
我希望解析器显示如下:
一些需要在调用列表*之前*显示的文本。
- 动态加1
- 动态添加2
一些需要在调用列表*之后*显示的文本。
但它显示的是这个(列表显示在容器内,但在文本内容之前):
- 动态加1
- 动态添加2
一些需要在调用列表*之前*显示的文本。
一些需要在调用列表*之后*显示的文本。
这是因为您直接在短代码回调中显示 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();
} ?>
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' );
我希望解析器显示如下:
一些需要在调用列表*之前*显示的文本。
- 动态加1
- 动态添加2
一些需要在调用列表*之后*显示的文本。
但它显示的是这个(列表显示在容器内,但在文本内容之前):
- 动态加1
- 动态添加2
一些需要在调用列表*之前*显示的文本。
一些需要在调用列表*之后*显示的文本。
这是因为您直接在短代码回调中显示 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();
} ?>