如何使此快捷代码适用于帖子内容

时间:2017-09-26 作者:GODWIN

我一直在努力,但没有成功。

但如果我尝试

<?php echo do_shortcode("[mimo]"); ?> <?php echo do_shortcode("[mibaby]"); ?>
它会很好地工作。

但要将其应用于帖子内容,请使用[mimo] [mibaby]

这行不通。

下面是我正在使用的函数。。。

function wpb_custom_new_menuw() {
  remove_filter( \'the_content\', \'wpautop\' );
}
add_shortcode(\'mibaby\', \'wpb_custom_new_menuw\');



function wpb_custom_new_menu() {
  remove_filter( \'the_excerpt\', \'wpautop\' );
}
add_shortcode(\'mimo\', \'wpb_custom_new_menu\');

2 个回复
SO网友:Stephen Afam-Osemene

我相信所发生的是,在解析短代码时,它已经调用了the_content 滤器毕竟,短代码在内容中。

尝试使用single_templatepage_template 而是挂钩。

SO网友:unnamedfeeling

这很简单-在触发上述过滤器后,您无法从内容内部删除对内容触发的过滤器。在模式上,您正在尝试这样做(为了简单起见,没有确切的名称):

|- wp_core_fires_its_functions_and_plugins
|-- wp_core_gets_raw_content
|--- wp_core_runs_filters_on_fetched_content (execution of shortcodes is done here)
|---- [mimo] - is fired inside filtered content and tries to remove filters which are already applied
所有这些都是实现过滤器删除的错误方法。

我建议以其他方式删除此类过滤器-创建一个带有字段的设置页面,以应用帖子id数组,并检查帖子/页面id是否位于模板文件中的该数组中,如下所示:

$fetched_posts_array=explode(\',\', get_option(\'posts_array_to_unfilter\'), \'\'); //get_option gets some string like \'99,566,435,2345\'
if(in_array($post->ID, $fetched_posts_array){
  apply_filter(\'the_content\', $post->post_content);
} else {
  echo $post->post_content;
}

结束

相关推荐

How does a shortcode work?

我知道如何使用短代码,甚至制作它们,但我需要了解的是,短代码是作为帖子内容存储在数据库中的纯文本,所以像这样的纯文本如何转换为动态文本。我想知道的是x 在服务器将文本发送到浏览器以使其正常工作之前,是否可以处理文本?