wake-up-neo.com

So erhalten Sie den Post-Typ in einem the_title-Filter

Ich möchte den Post-Titeln eines bestimmten benutzerdefinierten Post-Typs Text voranstellen, aber der Filter unten hat nicht funktioniert. Anstatt nur die Post-Titel dieses CPT zu ändern, wurden alle Titel auf den Seiten des CPT geändert - Menüelemente, Posts in sekundären Schleifen usw.

Was mache ich falsch? Ich vermute, es hat etwas mit dem Umfang von get_post_type () zu tun.

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

Sie können Menüs ausschließen, indem Sie die Beitrags-ID testen:

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

Sie können $post globalisieren, um den Beitragstyp zu ermitteln.

Beispiel:

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

Das Problem lag nicht bei get_post_type (), wie ich dachte, so dass Bainternets Vorschlag von $ post-> post_type zu denselben Ergebnissen führte. Bainternets Vorschlag aus den Kommentaren war das, was gebraucht wurde:

verwenden Sie den add_filter direkt vor Ihrer Schleife und den remove_filter nach der Schleife

0
supertrue

In den Jahren seit dem Hinzufügen dieser Frage wurde der Parameter $id zum Aktions-Hook the_title hinzugefügt. So, jetzt können Sie den Beitragstyp einfach mit get_post_type() ermitteln wie folgt:

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

    // Clever code here

    return $title;
}
0
dotancohen