修复我的自定义函数:删除自动<p>

时间:2011-08-31 作者:AndrettiMilas

我想删除我的摘录周围的自动段落标记,这是由自定义函数输出的。如果您能告诉我要在代码中添加什么,我将不胜感激。

我将此自定义函数用于摘录:

  // Default length (by WordPress)
  public static $length = 25;

  // So you can call: my_excerpt(\'short\');
  public static $types = array(
      \'short\' => 5,
      \'regular\' => 25,
      \'long\' => 100
    );

  public static function length($new_length = 55) {
    Excerpt::$length = $new_length;
    add_filter(\'excerpt_length\', \'Excerpt::new_length\');
    Excerpt::output();
  }
  public static function new_length() {
    if( isset(Excerpt::$types[Excerpt::$length]) )
      return Excerpt::$types[Excerpt::$length];
    else
      return Excerpt::$length;
  }
  public static function output() {
    the_excerpt();
  }
}

// An alias to the class
function my_excerpt($length = 25) {
  Excerpt::length($length);
}
并使用

<?php my_excerpt(\'short\'); ?>

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

如果我正确理解了你的问题,我想添加remove_filter( \'the_excerpt\', \'wpautop\' ); 当你有add_filter(\'excerpt_length\', \'Excerpt::new_length\'); 做你想做的事。

SO网友:Wordpressor

我知道两个很好的技巧,可以很好地处理短代码,也可以处理摘录。

您可以使用以下方法分析摘录的内容:

function my_excerpt( $content ) {

    /* Parse nested shortcodes and add formatting. */
    $content = trim( wpautop( do_shortcode( $content ) ) );

    /* Remove \'</p>\' from the start of the string. */
    if ( substr( $content, 0, 4 ) == \'</p>\' )
        $content = substr( $content, 4 );

    /* Remove \'<p>\' from the end of the string. */
    if ( substr( $content, -3, 3 ) == \'<p>\' )
        $content = substr( $content, 0, -3 );

    /* Remove any instances of \'<p></p>\'. */
    $content = str_replace( array( \'<p></p>\' ), \'\', $content );

    return $content;
}
此外,还有使用[原始]短代码的技术:

function my_formatter($content) {
    $new_content = \'\';
    $pattern_full = \'{(\\[raw\\].*?\\[/raw\\])}is\';
    $pattern_contents = \'{\\[raw\\](.*?)\\[/raw\\]}is\';
    $pieces = preg_split($pattern_full, $content, -1, PREG_SPLIT_DELIM_CAPTURE);

    foreach ($pieces as $piece) {
        if (preg_match($pattern_contents, $piece, $matches)) {
            $new_content .= $matches[1];
        } else {
            $new_content .= wptexturize(wpautop($piece));
        }
    }

    return $new_content;
}

remove_filter(\'the_content\', \'wpautop\');
remove_filter(\'the_content\', \'wptexturize\');

add_filter(\'the_content\', \'my_formatter\', 99);
我希望这有帮助。

如果你想让我们帮助你完成你的功能,首先说一下功能有什么问题总是一个好主意?

结束

相关推荐

帮助向header.php添加有条件的标题标签

从SEO的角度来看,我正在尝试向我的WP主题添加有条件的标题标签,以便它能够响应基于各种类别的文本。假设我的类别id为1、2、3、4然后,如果类别id=1,我想添加标题1,如果类别id=2,则添加标题2,依此类推。是否有人可以帮助您使用正确的php语法来实现这一点。谢谢