无法使用Add_Filter更改wp_title

时间:2011-02-12 作者:Steven

我有一个自定义页面,尝试更改页面标题
函数将执行,但标题不会更改。这是我正在使用的代码:

  add_filter(\'wp_title\', set_page_title($brand));

  function set_page_title($brand) { 
    $title = \'Designer \'.$brand[\'name\'].\' - \'.get_bloginfo(\'name\');
    //Here I can echo the result and see that it\'s actually triggered
    return $title;  
  } 
那么,为什么这不起作用呢?我是否使用add\\u筛选器错误?

3 个回复
SO网友:Alexandre Germain

wp_title 自WordPress 4.4以来,过滤器已被弃用(请参阅here). 你可以用document_title_parts 相反

function custom_title($title_parts) {
    $title_parts[\'title\'] = "Page Title";
    return $title_parts;
}
add_filter( \'document_title_parts\', \'custom_title\' );
在中custom_title 滤器$title_parts 包含键“title”、“page”(分页,如果有)、“tagline”(您指定的口号,仅在主页上)和“site”。按您喜欢的方式设置“标题”。WordPress将保留您配置的格式,然后将所有内容连接在一起。

如果要覆盖WordPress标题格式,请使用pre\\u get\\u document\\u title并为该过滤器提供一个函数,该函数接受字符串并返回所需的标题。

function custom_title($title) {
    return "Page Title";
}
add_filter( \'pre_get_document_title\', \'custom_title\' );

SO网友:keatch

无法传递数组来设置\\u page\\u title,过滤器回调仅接受原始标题作为输入参数。

如果希望函数以这种方式工作,请在函数外部定义$brand数组并使其全局化

  add_filter( \'wp_title\', \'set_page_title\' );
  $brand = array( \'name\' => \'Brand Name\' );

  function set_page_title( $orig_title ) { 
    global $brand;
    $title = \'Designer \'.$brand[\'name\'].\' - \'.get_bloginfo( \'name\' );
    //Here I can echo the result and see that it\'s actually triggered
    return $title;  
  }

SO网友:Steve Buzonas

这两个代码示例中发生的情况是,add\\u filter没有调用函数来接受返回作为新标题。函数add\\u filter需要至少两个参数,第一个是包含要使用的过滤器的“标记”或名称的字符串,第二个是混合参数。在使用已定义函数的情况下,应该将函数名用作字符串,它还可以接受命名空间中回调的数组和匿名函数。

在下列情况下:

add_filter(\'wp_title\', set_page_title(\'test\'));
将首先计算最内部的函数,并将其返回结果传递给下一个外部函数。

所以

add_filter(\'wp_title\', set_page_title(other_function(function() {return "real_filter";})));
将传递字符串“real\\u filter”以添加\\u filter,假设两者之间的所有函数都将其输入参数作为返回值传递。

我相信您想要的是以下内容:

function my_title_filter($old_title, $sep, $seplocation) {
    // Add some code to determine if/what you want to change your title to.

    global $brand;

    $title = "Designer " . $brand[\'name\'] . " $sep " . get_bloginfo(\'name\');

    return $title;
}

add_filter(\'wp_title\', \'my_title_filter\', 10, 3); // 10 is the priority,
    // and 3 is the number of arguments the function accepts.
    // wp_title can pass 3.
另一个警告。。。在调用apply\\u filters之前,必须初始化筛选器。最佳实践是在调用add\\u filter之前定义函数。

结束

相关推荐