web-dev-qa-db-fra.com

Changer le titre de la page depuis le plugin

Est-il possible de changer le titre de la page à la volée à partir du plugin?

J'ai essayé global $ post, mais le plugin semble courir après.

Des idées?

Edit: J'écris des pages à la volée, basées sur la même page/publication, afin que chaque page affiche le même titre. Chercher un moyen de faire via un shortcode ou écrire mon propre plugin/fonction

2
greenbandit

Il y a un filtre pour ça:

function wpse_alter_title( $title, $id )
{
    // $id = $post->ID;
    // alter the title here
    return $title;
}

Si vous souhaitez modifier les titres "Protégé" et "Privé", vous avez besoin d'autres filtres:

// Preserve the "%s" - else the title will be removed.
function wpse_alter_protected_title_format( $title )
{
    return __( 'Protected: %s' );
}

function wpse_alter_private_title_format( $title )
{
    return __( 'Private: %s' );
}

Enfin, vous devez ajouter vos rappels de filtre suffisamment tôt.

function wpse_load_alter_title()
{
    add_filter( 'the_title', 'wpse_alter_title', 20, 2 );
    add_filter( 'protected_title_format', 'wpse_alter_protected_title_format' );
    add_filter( 'private_title_format', 'wpse_alter_private_title_format' );
}
add_action( 'init', 'wpse_load_alter_title' );
3
kaiser

Cela dépend du contexte dans lequel le titre de votre page est rendu et de la manière dont les données sont introduites.

Considérer ce qui suit:

<h2><?php the_title(); ?></h2>

La solution impliquerait de s’accrocher au filtre the_title et de le modifier rapidement.

Que dis-tu de ça?

<h2><?php echo $post->post_title; ?></h2> // not Nice!

Et ce n'est pas agréable à cause des problèmes de modification. Il est difficile de savoir comment le $post a été peuplé en premier lieu. Considérer:

foreach( get_posts( ... ) as $post ):
    ...

Pas de place pour y accrocher, à première vue. Mais cela peut être fait dans la requête de messages réelle. Consultez le filtre found_posts .

Cependant, considérez ce qui suit:

$post = $wpdb->get_row( "SELECT .... " );
echo "<h2>$post->post_title</h2>"

C'est dingue.

Le fait est que, selon votre situation, il existe probablement une bonne solution. Vérifiez le fichier de modèle, voyez comment le titre est rendu. Fixez-le pour qu'il soit confortable ou faites travailler votre plugin un peu plus fort.

Et vous ne pourrez jamais modifier le titre via un plugin si mysql_query() est utilisé directement pour récupérer le titre. Oui, j'ai effectivement vu cela fait. Certaines personnes vont même jusqu'à coder en dur dans le modèle. Comme front-page.php contiendra <h2>Home</h2> et n'utilisera même jamais le $post->post_title ou n'interrogera jamais la base de données.

Donc, dépend du contexte et de la situation.

1
soulseekah