web-dev-qa-db-ja.com

特定の投稿IDで投稿の抜粋とタイトルを取得しますか?

特定の投稿IDで投稿の抜粋とタイトルを取得しようとしています。私の投稿IDは6、私のコードは以下の通りです

<?php
    $id = 6;
    $post = get_post( $id );
    $excerpt = get_excerpt( $id);
    $excerpt = $post->post_excerpt;
?>
<h6><?php the_title(); ?></h6>

<?php echo get_excerpt(190); ?>

投稿ID 6のタイトルが表示されていますが、抜粋が間違っています。また、functions.phpに抜粋の長さ制御コードがあります。

// Changing excerpt length
function get_excerpt($count){
    $permalink = get_permalink($post->ID);
    $excerpt = get_the_content();
    $excerpt = strip_tags($excerpt);
    $excerpt = substr($excerpt, 0, $count);
    $excerpt = substr($excerpt, 0, strripos($excerpt, " "));
    $excerpt = $excerpt.'... <a href="'.$permalink.'">Read More</a>';
    return $excerpt;
}

任意の助けは大歓迎です...

1

あなたのget_excerpt()関数はglobal$post変数を使いますが、それはあなたの関数の範囲外です。

// Changing excerpt length
function get_excerpt($count){
    $permalink = get_permalink($post->ID);
    $excerpt = get_the_content();
    $excerpt = strip_tags($excerpt);
    $excerpt = substr($excerpt, 0, $count);
    $excerpt = substr($excerpt, 0, strripos($excerpt, " "));
    $excerpt = $excerpt.'... <a href="'.$permalink.'">Read More</a>';
    return $excerpt;
}

つまり、これを行うと、

$id = 6;
$post = get_post( $id );
$excerpt = get_excerpt( $id);

ループ内のcurrent投稿の投稿contentを、投稿のIDに基づいて切り捨てようとしています取得しようとしている抜粋ですが、$postは範囲外であり、したがって「未定義」になります。次に、$postが設定されていると仮定します。

$excerpt = $post->post_excerpt;

...それでは、ループの現在の投稿からの生の抜粋データで、生成された「抜粋」データを完全に上書きしています。

その後...

echo get_excerpt(190);

...抜粋Loop内の現在の投稿から)をもう一度取得してエコーします。

あなたがしていることはいくつかの異なる方法でかなり間違っています。そのコードを理解せずにコピーして貼り付けたと仮定する必要がありますが、これは非常に危険です。私はあなたに対してそれを警告します。

WordPress Core関数 get_the_title() はID引数を受け入れますが、 get_the_excerpt() はそうではないので、両方が必要なので、単にpostオブジェクトを取得することをお勧めします。

$id = 6;
$p = get_post($id);
// var_dump($p);
echo apply_filters('the_title',$p->post_title);
echo apply_filters('the_excerpt',$p->post_excerpt); // for a manually created excerpt

投稿コンテンツからの抜粋を生成するには、次のようなものが必要です。

$text = $p->post_content;
$text = strip_shortcodes( $text );
$text = apply_filters( 'the_content', $text );
$text = str_replace(']]>', ']]&gt;', $text);
$excerpt_length = apply_filters( 'excerpt_length', 55 );
$excerpt_more = apply_filters( 'excerpt_more', ' ' . '[&hellip;]' );
$text = wp_trim_words( $text, $excerpt_length, $excerpt_more );
echo $text;

これは本当にコア関数の単純化されたバージョンです wp_trim_excerpt()

抜粋の長さは、 excerpt_length フィルタを使用して制御できます。コーデックスの例によると:

function custom_excerpt_length( $length ) {
    return 20;
}
add_filter( 'excerpt_length', 'custom_excerpt_length', 999 );
4
s_ha_dum

あなたはたくさん起こっているようです...

私は以下を試してみます:

$id = 6;
$post = get_post( $id );
$excerpt = get_excerpt('190');

抜粋を表示するには、次のようにします。

echo $excerpt;
1
Courtney Ivey

<?php echo get_excerpt(190); ?>この部分は間違っています。 id = 190から抜粋して印刷しているのはecho $excerptを使うだけです。 <?php echo get_excerpt(190); ?>という行も必要ありません。

コーデックスのページを注意深く読むと、関数がどのように機能するかを理解するのに役立つたくさんの例がそこにあります http://codex.wordpress.org/Function_Reference/get_post

1
Sisir

ID 6の特定の投稿のエキスパートを取得したい場合は、以下のようにしてください。

<?php
$id = 6;
$posts = get_posts($id)
foreach($posts as $post):?>
<h6><?php echo $post->post_title;?></h6>
<p><?php echo $post->post_excerpt();?></p>
<?php endforeach; ?>

これは単にid 6のタイトルと投稿の抜粋を与えるだけです。

0
Yamu

$ excerpt変数をエコーし​​てみませんか?これでうまくいくと思います。これをしないでください。

<?php echo get_excerpt(190); ?>

これを行う:

<?php echo $excerpt; ?>
0
ukando