web-dev-qa-db-ja.com

抜粋の最初の2語をトリミング

私は現在、記事の抜粋を引っ張っていますが、タイトルがすでにあるので、私はむしろこの特定の場所に持っていないであろうということの冒頭に2つの単語があります。

私は以前にwp_trimを使ったことがありますが、これは最後から単語を削除するだけなので、最初の2単語に対してこれを実行する方法はありますか。それが助けになれば、これらの言葉はいつも同じですか?抜粋を文字列として取得してから何も置き換えないか、またはwp_trimがこれを実行できるかどうかはわかりません。

<?php $tagname = get_the_title (); ?>
<?php

$original_query = $wp_query;
$wp_query = null;
$args=array('posts_per_page'=>1, 
    'orderby' => 'Rand',
    'tag' => sluggify( $tagname));
$wp_query = new WP_Query( $args );
if ( have_posts() ) :
    while (have_posts()) : the_post();
        echo '<h2 class="entry-title">';
        echo 'CASE STUDY';
        echo '</h2>';
        echo '<span>';
        the_post_thumbnail();
        echo '</span>';
        echo '<strong>';
        the_title();
        echo '</strong>';
        echo '<p>';
        the_excerpt();
        echo '</p>';
    endwhile;
endif;
$wp_query = null;
$wp_query = $original_query;
wp_reset_postdata();?>

@RRikeshからの提案された回答からの修正されたコード:

<?php $tagname = get_the_title (); ?>
<?php

$original_query = $wp_query;
$wp_query = null;
$args=array('posts_per_page'=>1, 
    'orderby' => 'Rand',
    'tag' => sluggify( $tagname));
$wp_query = new WP_Query( $args );
if ( have_posts() ) :
    while (have_posts()) : the_post();
    $str = get_the_excerpt();

        echo '<h2 class="entry-title">';
        echo 'CASE STUDY';
        echo '</h2>';
        echo '<span>';
        the_post_thumbnail();
        echo '</span>';
        echo '<strong>';
        the_title();
        echo '</strong>';
        echo '<p>';
        echo ltrim($str, "INSTRUCTION SYNOPSIS"); // Output: This is another Hello World.
        echo '</p>';
    endwhile;
endif;
$wp_query = null;
$wp_query = $original_query;
wp_reset_postdata();?>
2
Ben H

末尾の文字列から最初の21文字を削除するためにsubstrを使用しました。これはもっと一貫していました。

$str = get_the_excerpt();
$str2 = substr($str, 21);
echo str2;
1
Ben H

より信頼できる方法は、抜粋をフィルタリングして文字列を配列に展開し、配列から最初の2つのキーと値のペアを削除してから文字列を返すことです。

add_filter( 'wp_trim_excerpt', function ( $text )
{
    // Make sure we have a text
    if ( !$text )
        return $text;

    $text               = ltrim( $text );
    $text_as_array      = explode( ' ', $text );

    // Make sure we have at least X amount of words as an array
    if ( 10 > count( $text_as_array ) )
        return $text;

    $text_array_to_keep = array_slice( $text_as_array, 2 );
    $text_as_string     = implode( ' ', $text_array_to_keep );
    $text               = $text_as_string;

    return $text;
}):
3
Pieter Goosen

preg_replace ワンコールレスキューへ。 /\w+/は単語に一致しますが、 preg_replace() の3番目の引数は一致の数を指定します。あなたはそれらを削除したいので、私たちは単に置き換えとして空の文字列を渡します。

$str = 'These are some words. But the first two will not remain.';

// pattern, replacement, string, limit

echo preg_replace( '/\w+/', '', $str, 2 );

// output: some words. But the first 2 will not remain.

別の方法は substrstrpos と一緒に使用することです。

// reduce the extra whitespace

$str = trim( "   This is some text and stuff.  " );

// find the second space and pull everything after

echo trim( substr( $str, strpos( $str, ' ', strpos( $str, ' ' ) + 1 ) ) );

// output: some text and stuff.
2
jgraup