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;
}
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;
}
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}";
}
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
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;
}