21主题中的DO_SHORT CODE()

时间:2011-08-27 作者:a_fan

我观察到twentytentwentyeleven 主题。让我举例说明:example.com/category/health-beauty/ 查找一篇只包含短代码的帖子。

如果我使用twentyten, 只显示twentyeleven 快捷码已展开。实际上这就是我想要的twentyten 但问题是我找不到do_shortcode 请来twentyeleven 密码必须有一个。正当

2 个回复
最合适的回答,由SO网友:chrisguitarguy 整理而成

看起来是210显示了分类档案的摘录。

如果您使用的是手动摘录,这是一个简单的修复方法。只需将这行代码添加到主题的函数中。php文件。它告诉wordpress通过do\\u shortcode函数/过滤器运行摘录。

add_filter( \'the_excerpt\', \'do_shortcode\' );
如果您没有使用手动摘录,我们必须更深入一点。功能the_excerpt 仅返回文章摘录是否为空。如果摘录是空的,它不会抓取部分内容并将其丢弃。这意味着WordPress与the_excerptget_the_excerpt 沿途某处过滤。在里面wp-includes/default-filters.php 我们找到了罪魁祸首:

add_filter( \'get_the_excerpt\', \'wp_trim_excerpt\'  );
该函数将获取部分帖子内容,同时删除短代码,并将其作为摘录返回:

<?php
function wp_trim_excerpt($text) {
       $raw_excerpt = $text;
       if ( \'\' == $text ) {
          $text = get_the_content(\'\');

          $text = strip_shortcodes( $text );

          $text = apply_filters(\'the_content\', $text);
         $text = str_replace(\']]>\', \']]&gt;\', $text);
          $text = strip_tags($text);
          $excerpt_length = apply_filters(\'excerpt_length\', 55);
          $excerpt_more = apply_filters(\'excerpt_more\', \' \' . \'[...]\');
          $words = preg_split("/[\\n\\r\\t ]+/", $text, $excerpt_length + 1, PREG_SPLIT_NO_EMPTY);
          if ( count($words) > $excerpt_length ) {
              array_pop($words);
              $text = implode(\' \', $words);
              $text = $text . $excerpt_more;
          } else {
              $text = implode(\' \', $words);
          }
      }
      return apply_filters(\'wp_trim_excerpt\', $text, $raw_excerpt);
}
因此,我们需要删除这个默认过滤器,并用我们自己的过滤器重新安装它。

<?php
remove_filter( \'get_the_excerpt\', \'wp_trim_excerpt\', 10 );
add_filter( \'get_the_excerpt\', \'wpse27049_wp_trim_excerpt\', 99, 1 );
function wpse27049_wp_trim_excerpt( $text )
{
    if ( \'\' == $text ) {
        $text = get_the_content(\'\');
        $text = substr( $text, 0, 55 );
        $excerpt_more = apply_filters( \'excerpt_more\', \'[...]\' );
        $text = $text . $excerpt_more;
    }
    return $text;

}
或者,如果没有摘录,您可以返回整个内容:

<?php
remove_filter( \'get_the_excerpt\', \'wp_trim_excerpt\', 10 );
add_filter( \'get_the_excerpt\', \'wpse27049_wp_trim_excerpt\', 99, 1 );
function wpse27049_wp_trim_excerpt( $text )
{
    if ( \'\' == $text ) {
        $text = get_the_content(\'\');
    }
    return $text;

}
作为插件:http://pastie.org/2439045

SO网友:Ashfame

不需要呼叫的内容do_shortcode, 解析内容以执行其中的任何短代码。因此,请检查您所在的帖子或页面的内容。

结束

相关推荐

Shortcode empty attribute

有没有办法为短代码创建一个空属性?示例:function paragraph_shortcode( $atts, $content = null ) { return \'<p class=\"super-p\">\' . do_shortcode($content) . \'</p>\'; } add_shortcode(\'paragraph\', \'paragraph_shortcode\'); 用户类型某物它显