我正在制作一个修改帖子标题的wordpress插件。我只想在查看单个帖子时这样做。具体来说,我想在标题旁边添加一个链接,但出于问题的目的,我将添加一些仲裁文本。
我开始时使用'the_title'过滤器挂钩,并调用此函数。
function add_button_to_title($title)
{
global $post;
if(is_single())
{
return $title.'googly googly';
}
return $title;
}
问题是,侧栏上的链接显然也使用'the_title',因为我看到我的文字也显示在侧栏中,这导致我:
if(is_single() && in_the_loop())
但是,然后,在我的主题(我想一般的主题)中有一个链接到上一篇文章和下一篇文章,它也使用了“标题”过滤器。所以最后我有:
if(is_single() && in_the_loop() && ($post->post_title == $title))
最后一个条件基本上确保它是正在打印的帖子的标题,而不是下一个或上一个帖子的标题。这是有效的,但我不确定它在不同的主题下会有多好用......看起来非常黑了。来自wordpress大师的任何建议吗?我担心标题会因其他原因而被修改,条件会失败。
感谢任何帮助!
答案 0 :(得分:2)
应,
除了正如ShaderOp所说,需要进行主题修改之外,还没有一个很好的解决方案。您的解决方案大部分都可以使用。唯一的例外是主题开发人员在页面中更改了查询。我想这可能是一个很好的解决方案,它将覆盖你遇到的95%以上的案例。
答案 1 :(得分:2)
我通过添加一项检查来解决类似的问题,以查看过滤的标题是否与帖子的标题相匹配。这样可以避免页面上的其他帖子标题(侧边栏,菜单中)也被过滤掉。
function add_button_to_title( $title ) {
global $post;
if( is_single() && $title == $post->post_title ) {
return $title . 'googly googly';
} else {
return $title;
}
}
答案 2 :(得分:0)
保留add_button_to_title
功能的原始版本会不会更容易,但不是将其挂钩到过滤器,而是直接从相应位置的single.php
页面调用它?
例如,在主题single.php
中的某个位置,而不是:
<h3 class="storytitle">
<a href="<?php the_permalink() ?>" rel="bookmark"><?php the_title(); ?></a>
</h3>
使用此:
<h3 class="storytitle">
<a href="<?php the_permalink() ?>" rel="bookmark">
<?php echo add_button_to_title(the_title('', '', false); ?>
</a>
</h3>
答案 3 :(得分:0)
今天我遇到了类似的问题。 the_title在整个页面中被调用几次(例如,在html-head,菜单,侧边栏中)。我遵循了使用条件和帖子/页面ID的类似方法。
此外,我添加了一个布尔标志,使用'the_content'过滤器设置为true。因此标题会更改,直到显示内容为止。这样,我确保侧边栏/窗口小部件不受影响(例如,主题主题有一个默认的窗口小部件,其中包含指向页面的链接 - 这里其他条件不会有用,因为get_the_id()将返回等效项)。仅当主题使用右侧的侧边栏时,此功能才有效。在找到页面/帖子的'the_title'之前,我没有找到一种方法直接挂钩以启用布尔标志。
function myplugin_adjust_title($title, $id) {
global $myplugin_title_changed;
if ($myplugin_title_changed) {
return $title;
}
if (in_the_loop() && is_page('myplugin') && $id == get_the_ID()) {
$title = '';
}
return $title;
}
add_filter('the_title', 'myplugin_adjust_title', 10, 2);
function myplugin_adjust_title_helper_content($content) {
global $myplugin_title_changed;
$myplugin_title_changed = true;
return $content;
}
add_filter('the_content', 'myplugin_adjust_title_helper_content');