web-dev-qa-db-ja.com

The_titleフィルタで投稿タイプを正しく取得する方法

特定のカスタム投稿タイプの投稿タイトルの前にテキストを追加したいのですが、以下のフィルタが機能しませんでした。その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;
}
4
supertrue

投稿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;
}
4
Gouhen

投稿タイプを解決するために$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}";
}
6
Bainternet

私が思っていたようにget_post_type()に問題はありませんでした、それでBainternetの$ post-> post_typeの提案は同じ結果を生み出しました。コメントからのBainternetの提案は、必要とされたものでした:

ループの直前にadd_filterを使用し、ループの後にremove_filterを追加します。

0
supertrue

この質問が追加されてからの年月の間に、$idパラメータがthe_titleアクションフックに追加されました。これでget_post_type()を使用して/ - 投稿タイプを簡単に取得できます。

function actionTheTitle($title, $id)
{
    $post_type = get_post_type($id);

    // Clever code here

    return $title;
}
0
dotancohen