get_the_title()
を呼び出すコードがあり、それは機能しますが、get_the_excerpt()
は空を返します。どのように私はそれを動作させることができますか?
このコードは "WP Facebook Open Graph protocol"というプラグインの中にあります。これは私が変更したい部分です。
if (is_singular('post')) {
if (has_excerpt($post->ID)) {
echo "\t<meta property='og:description' content='".esc_attr(strip_tags(get_the_excerpt($post->ID)))."' />\n";
}else{
echo "\t<meta property='og:description' content='". [?] ."' />\n";
}
}else{
echo "\t<meta property='og:description' content='".get_bloginfo('description')."' />\n";
}
ここで、has_excerpt
は常に失敗し、get_the_excerpt($post->ID)
はもう動作しません(廃止予定)。
それで、どのように私はそこに抜粋を表示することができますか?
ps:私は "Advanced Excerpt"プラグインも使っています
my_excerpt($post->post_content, get_the_excerpt())
を使い、 からmy_excerpt()
関数を使います。wp_trim_excerptを使ってthe_excerpt()をループの外に出す
この質問をwithout postオブジェクトでどのように実行するかを見たときに私は見つけました。
私の追加の研究はこの滑らかなテクニックを生み出しました:
$text = apply_filters('the_excerpt', get_post_field('post_excerpt', $post_id));
抜粋が必要なpostオブジェクトが既にあるように思われるので、単に物事を機能させることができます。
setup_postdata( $post );
$excerpt = get_the_excerpt();
setup_postdata()
関数は$post
オブジェクトをグローバル化し、それを通常の古いループ関数で利用できるようにします。あなたがループの内側にいるとき、あなたはthe_post()
を呼び出します、そしてそれはあなたのために物事をセットアップします...あなたはそれを手動で強制する必要があるループの外側に。
これを試して:
Functions.phpに新しい関数を作成し、その後どこからでもそれを呼び出します。
function get_excerpt_by_id($post_id){
$the_post = get_post($post_id); //Gets post ID
$the_excerpt = $the_post->post_content; //Gets post_content to be used as a basis for the excerpt
$excerpt_length = 35; //Sets excerpt length by Word count
$the_excerpt = strip_tags(strip_shortcodes($the_excerpt)); //Strips tags and images
$words = explode(' ', $the_excerpt, $excerpt_length + 1);
if(count($words) > $excerpt_length) :
array_pop($words);
array_Push($words, '…');
$the_excerpt = implode(' ', $words);
endif;
$the_excerpt = '<p>' . $the_excerpt . '</p>';
return $the_excerpt;
}
今、あなたは単に get_the_excerpt( $postID )
関数を使うことができます。 WordPress 4.5.0から$post
パラメータが導入されました。
これはループの外でget_the_excerpt()
を使いたい時のためのものです。
function custom_get_excerpt($post_id) {
$temp = $post;
$post = get_post($post_id);
setup_postdata($post);
$excerpt = get_the_excerpt();
wp_reset_postdata();
$post = $temp;
return $excerpt;
}
あなたがpostオブジェクトを持っていない場合、これはWithersからのもののような短い関数です。
function get_excerpt_by_id($post_id){
$the_post = get_post($post_id);
$the_excerpt = $the_post->post_excerpt;
return $the_excerpt;
}
1行の内容から抜粋を自動的に生成したい場合は、 wp_trim_words
関数を次のように使用します。
// 30 is the number of words ehere
$excerpt = wp_trim_words(get_post_field('post_content', $post_id), 30);