特定のカスタム投稿タイプの投稿タイトルの前にテキストを追加したいのですが、以下のフィルタが機能しませんでした。そのCPTの投稿タイトルのみを変更する代わりに、それは与えられたCPTのページ上の all タイトル - メニュー項目、二次ループの投稿など - を変更しました.
何がおかしいのですか? get_post_type()のスコープと関係があるのでしょうか。
add_filter( 'the_title', 'add_cpt_prefix' );
function add_cpt_prefix( $title ) {
if ( get_post_type() == 'press' ) {
$title = '<span>Press:</span> ' . $title;
}
return $title;
}
投稿IDをテストしてメニューを除外できます。
add_filter( 'the_title', 'add_cpt_prefix' );
function add_cpt_prefix( $title ) {
global $id, $post;
if ( $id && $post && $post->post_type == 'press' ) {
$title = '<span>Press:</span> ' . $title;
}
return $title;
}
投稿タイプを解決するために$post
をグローバル化することができます。
例:
add_filter( 'the_title', 'add_the_title_prefix' );
function add_the_title_prefix( $title )
{
global $post;
if ( 'custom_post_type_name' != $post->post_type )
return $title;
return "<span>Press:</span> {$title}";
}
私が思っていたようにget_post_type()に問題はありませんでした、それでBainternetの$ post-> post_typeの提案は同じ結果を生み出しました。コメントからのBainternetの提案は、必要とされたものでした:
ループの直前にadd_filterを使用し、ループの後にremove_filterを追加します。
この質問が追加されてからの年月の間に、$id
パラメータがthe_title
アクションフックに追加されました。これでget_post_type()
を使用して/ - 投稿タイプを簡単に取得できます。
function actionTheTitle($title, $id)
{
$post_type = get_post_type($id);
// Clever code here
return $title;
}