Change page title from plugin

时间:2012-03-24 作者:greenbandit

是否可以从插件动态更改页面标题?

我尝试了global$post,但似乎插件在追求它。

有什么想法吗?

编辑:我正在根据相同的页面/帖子动态编写一些页面,因此每个页面都显示相同的标题。寻找一种通过短代码或编写自己的插件/函数来实现的方法

2 个回复
最合适的回答,由SO网友:kaiser 整理而成

有一个过滤器:

function wpse_alter_title( $title, $id )
{
    // $id = $post->ID;
    // alter the title here
    return $title;
}
如果要更改“受保护”和“私人”标题,则需要其他筛选器:

// 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\' );
}
最后但并非最不重要的一点是,您必须尽早添加过滤器回调。

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\' );

SO网友:soulseekah

这取决于页面标题呈现的上下文以及数据如何输入到其中。

考虑以下因素:

<h2><?php the_title(); ?></h2>
解决方案包括挂接到the_title 在微风中过滤和改变它。

这个怎么样?

<h2><?php echo $post->post_title; ?></h2> // not nice!
由于改变它的问题,这是不好的。很难知道$post 一开始就有人居住。考虑:

foreach( get_posts( ... ) as $post ):
    ...
乍一看,那里没有地方可以钩住。但这可以在实际帖子查询中完成。查看found_posts 滤器

但是,请考虑以下因素:

$post = $wpdb->get_row( "SELECT .... " );
echo "<h2>$post->post_title</h2>"
那太疯狂了。

重点是,根据您的情况,可能有一个好的解决方案。检查模板文件,查看标题的呈现方式。将其修复为舒适或使插件更难工作。

你永远无法通过插件更改标题,如果mysql_query() 直接用于检索标题。是的,我真的看过了。有些人甚至在模板中硬编码。就像头版。php将包含<h2>Home</h2> 永远不要使用$post->post_title 或者查询数据库。

因此,这取决于上下文和情况。

结束

相关推荐

如何将GET_PAGE_BY_TITLE()与qTranslate一起使用?

知道如何使用WP函数吗get_page_by_title() 是否安装了qTranslate?例如:$page_contact = get_page_by_title( \'_e(\"[:en]contact\");\' ,\'page\' ); $page_contact_ID = $page_contact->ID; echo \'~~~~\'.$page_contact_ID; 我能得到匹配的唯一方法是将整个字符串包含在所有语言中,而一旦人们开始编辑页面,这是行不通的。。。