テンプレートのホームページに最新のブログ投稿を表示するショートコードを作成するためにカスタム関数を使用しています。しかし、私はそれに画像を表示させないようにしています。
Advanced Excerptプラグインを使用して画像を削除できることはわかっていますが、問題は、the_excerpt()
をテンプレートで使用しているため、index.phpフィードから画像も削除されることです。
これがショートコードを作成するカスタム関数です。
function my_recent_news()
{
global $post;
$html = "";
$my_query = new WP_Query( array(
'post_type' => 'post',
'posts_per_page' => 4
));
if( $my_query->have_posts() ) : while( $my_query->have_posts() ) : $my_query->the_post();
$html .= "
<article>
<span class=\"date\">" . get_the_date() . "</span>
<h2><a href=\"" . get_permalink() . "\">" . get_the_title() . "</a></h2>
" . get_the_excerpt() . "
</article>
";
endwhile;
endif;
wp_reset_query();
return $html;
}
add_shortcode( 'news', 'my_recent_news' );
私は以前にこれについて何かを投稿しました:
解決策はAdvanced Excerptプラグインを使用することでしたが、そのためにはホームとブログフィードページで抜粋を使用しようとしていますが、ブログフィードでimg
マークアップを保持してカスタムショートコードからimgタグを削除します。 。
私はそのカスタムショートコード関数でthe_excerpt()
だけを使用しようとしました、しかしそれはちょうど全体の関数を壊して、そしていくつかの本当に奇妙なものを表示するようです。
私はそれを取り除くためにどこかにフィルタを持っている必要があるかどうかはあまりわかりません。私はフィルターが必要な場合、それがどこに行くのかもわかりません。ループの前、ループの後、それとも独自の構成引数が必要ですか。
わかりました、それで私はもっと掘り下げてテストをしました、そしてstrip_tags()
を使うことによって基本的にget_the_excerpt()
内のどんなフォーマットも削除します。
これが私の最新のコードです。
function my_recent_news()
{
global $post;
$html = "";
$my_query = new WP_Query( array(
'post_type' => 'post',
'posts_per_page' => 4
));
if( $my_query->have_posts() ) : while( $my_query->have_posts() ) : $my_query->the_post();
$html .= "
<article>
<span class=\"date\">" . get_the_date() . "</span>
<h2><a href=\"" . get_permalink() . "\">" . get_the_title() . "</a></h2>
" . strip_tags(get_the_excerpt(), "<a>") . "
</article>
";
endwhile;
endif;
wp_reset_query();
return $html;
}
add_shortcode( 'news', 'my_recent_news' );
投稿の抜粋内に表示されるハイパーリンクを保持するために<a>
を追加しました。
これにより、ブログフィードページでマークアップを維持しながら、高度な抜粋プラグインを使用して長さを調整したりできなかったりします。
get_the_excerpt()
のコーデックスエントリ を読むと、これがわかります。
投稿に抜粋がない場合、この関数は投稿のコンテンツにwp_trim_excerptを適用し、生成された文字列の末尾に "[...]"を返します。 wp_trim_excerptはget_the_excerptフィルタを介して適用され、削除することができます。
必要に応じてコンテンツからの抜粋を生成します。
抜粋の単語数は55ワードになり、それより多い場合は、文字列 '[...]'が抜粋に追加されます。文字列が55ワード未満の場合、コンテンツはそのまま返されます。
そのため、wp_trim_excerpt()
をget_the_excerpt
フィルタに再適用するか、直接出力することができます。
$html .= "
<article>
<span class=\"date\">" . get_the_date() . "</span>
<h2><a href=\"" . get_permalink() . "\">" . get_the_title() . "</a></h2>
" . wp_trim_excerpt() . "
</article>
";