【问题标题】:targeting title in wordpress post在 wordpress 帖子中定位标题
【发布时间】:2010-08-10 15:47:25
【问题描述】:

我正在开发一个修改帖子标题的 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 大师有什么建议吗?我担心标题会因为其他原因被修改,条件会失败。

感谢任何帮助!

【问题讨论】:

  • 也许比较帖子ID更安全(作为第二个参数传递给the_title过滤器。如果在修改标题之前有另一个过滤器,我认为传递的标题可能与帖子数据库不匹配标题,这会使您的测试失败。那么比较 ID 会更安全。
  • 嗨,一月,如果我能找出哪个钩子负责输出 id,这将是一个很好的解决方案。输出标题时,会调用“the_title()”过滤器。 id 有类似的吗?

标签: wordpress


【解决方案1】:

英,

除了 ShaderOp 所说的需要修改主题之外,没有真正好的解决方案。您的解决方案将在很大程度上起作用。唯一的例外是主题开发人员更改了页面中的查询。我想说这可能是一个足够好的解决方案,它可以涵盖您遇到的 95% 以上的情况。

【讨论】:

    【解决方案2】:

    我通过添加检查以查看被过滤的标题是否与帖子的标题匹配来解决了类似的问题。这避免了页面上其他帖子标题(在侧边栏、菜单中)也被过滤的问题。

    function add_button_to_title( $title ) {
      global $post;
      if( is_single() && $title == $post->post_title ) {
        return $title . 'googly googly';
      } else {
        return $title;
      }
    }
    

    【讨论】:

    • 你用了什么过滤器?
    【解决方案3】:

    保留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>
    

    【讨论】:

    • 这不是一个很好的解决方案,因为它将是一个插件,而不是一个主题修改。这意味着无法从插件访问主题文件,因此 Ying 需要一个几乎可以在任何地方都可以使用且无需修改文件的解决方案。
    • 是的,这就是我最初为引导所做的。正如约翰所指出的,我希望它能够接触到应该能够“插入”的广大受众。不过感谢您的贡献!
    【解决方案4】:

    今天我遇到了类似的问题。 the_title 在整个页面中被多次调用(例如,在 html-head、菜单、侧边栏中)。我使用条件和帖子/页面 ID 遵循了类似的方法。

    此外,我添加了一个布尔标志,使用“the_content”过滤器将其设置为真。因此,在显示内容之前,标题会更改。这样,我确保侧边栏/小部件不受影响(例如,主题主题有一个带有页面链接的默认小部件 - 这里其他条件不会有帮助,因为 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');
    

    【讨论】:

    • “右侧边栏”具有误导性。你的意思是它只有在代码中的页面/帖子内容之后调用侧边栏时才有效(右侧的侧边栏实际上可以在页面/帖子内容之前调用)。
    猜你喜欢
    • 1970-01-01
    • 2014-12-03
    • 2015-07-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-04
    相关资源
    最近更新 更多