web-dev-qa-db-ja.com

各記事の最初の段落をつくむ

私はpreg_matchを使って最初の段落をつかみ、そしてそれをループの中で吐き出すコードを持っています。

function first_paragraph() {
  global $post, $posts;
  $first_para = '';
  ob_start();
  ob_end_clean();
  $output = preg_match_all('%(<p[^>]*>.*?</p>)%i', $post->post_content, $matches);
  $first_para = $matches [1] [0];
  echo $first_para;
}

しかし、これには少し問題があります。エディタで<p> </p>タグでテキストを手動でラップした場合にのみ機能します。それ以外の場合は機能しません。正規表現は確かに私の強みではないので、どんな助けやさらなる理解も素晴らしいでしょう。

これはうまくいき、images/iframeもpタグで囲みます。

function first_paragraph() {
  global $post, $posts;
  $first_para = '';
  ob_start();
  ob_end_clean();
  $post_content = $post->post_content;
  $post_content = apply_filters('the_content', $post_content);
  $output = preg_match_all('%(<p[^>]*>.*?</p>)%i', $post_content, $matches);
  $first_para = $matches [1] [0];
  echo $first_para;
}
2
tmyie

あなたはこの機能を使用することができます:

function get_first_paragraph(){
    global $post;
    $str = wpautop( get_the_content() );
    $str = substr( $str, 0, strpos( $str, '</p>' ) + 4 );
    $str = strip_tags($str, '<a><strong><em>');
    return '<p>' . $str . '</p>';
}

それから、ループの中でそれを呼び出します。

<?php echo get_first_paragraph(); ?>

あなたが探している魔法の部分は wpautop 、それは適切な段落にテキストの二重改行を変換するWordpressの機能です。

Wpautopを配置したら、PHP関数 substr を使用して、最初の段落が最初の最後の段落に達するまで最初の文字から始めて4文字を追加するタグは削除されません。


これをさらに拡張するために、最初の段落以外のすべてを取得したい場合は、最初の最後の段落タグの末尾から開始してその後のすべてを取得するこの補足関数を使用できます。

function get_the_post(){
    global $post;
    $str = wpautop( get_the_content() );
    $str = substr( $str, (strpos( $str, '</p>')));
    return $str;
}

そして、ループ内でそれを呼び出す:

<?php echo get_the_post(); ?>
2
davidcondrey

これを試して:

function first_paragraph() {
    global $post, $posts;
    $post_content = $post->post_content;
    $post_content = apply_filters('the_content', $post_content);
    $post_content = str_replace('</p>', '', $post_content);
    $paras = explode('<p>', $post_content);
    array_shift($paras);

    return $paras[0]; 
}