web-dev-qa-db-fra.com

Comment obtenir correctement le type de message dans un filtre the_title

Je souhaite ajouter du texte aux titres de publication d'un type de publication personnalisé spécifique, mais le filtre ci-dessous n'a pas fonctionné. Au lieu de ne changer que les titres de publication de ce CPT, il a modifié tous les titres des pages de ce dernier - éléments de menus, publications dans les boucles secondaires, etc.

Qu'est-ce que je fais mal? Je suppose que cela a quelque chose à voir avec la portée de 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

Vous pouvez exclure des menus en testant l'identifiant de la publication:

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

Vous pouvez globaliser $post pour élaborer le type de publication.

Exemple:

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

Le problème n'était pas avec get_post_type () comme je le pensais. La proposition de Bainternet de $ post-> post_type a donc donné les mêmes résultats. La suggestion de Bainternet à partir des commentaires était ce qui était nécessaire:

utilisez add_filter juste avant votre boucle et ajoutez remove_filter après la boucle

0
supertrue

Depuis que cette question a été ajoutée, le paramètre $id a été ajouté au point d'ancrage de l'action the_title. Alors maintenant, vous pouvez obtenir le type de message facilement en utilisant get_post_type()as so:

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

    // Clever code here

    return $title;
}
0
dotancohen