首页 文章

设置wp_title来更改插件中的 Headers 标签?

提问于
浏览
7

我创建了一个WP插件,它使用查询字符串根据访问者选择的内容提取页面数据 . 显然,这会'模拟'其他页面,但页面 Headers 不会改变WP Admin中的 Headers 集 .

我一直试图挂钩 wp_title 来改变飞行中的 Headers 标签,但不能让这个工作 .

以下功能有效:

public function custom_title($title) {
    return 'new title';
}
add_filter( 'wp_title', array($this, 'custom_title'), 20 );
// changes <title> to 'new title'

一旦我尝试将变量传递给它,它就会失败 .

public function custom_title($title, $new_title) {
    return $new_title;
}

WordPress抱怨它缺少第二个参数,我想这是有意义的,因为函数是在页面加载时被调用的...我希望我能在我的插件中做 $this->custom_title($title, 'new title); 这样的东西,但它看起来不太可能?

我在这里发布了这个,因为我认为这是一个普通的PHP类问题 .

我可以全局化返回的变量,例如我想从另一个函数中返回'title'列,例如 $query->title

函数运行时,它返回数据库中的数据

public function view_content()
{
  $query = $this->db->get_row('SELECT title FROM ...');
  $query->title; 
}

我现在需要将$ query-> title设置为页面 Headers .

public function custom_title()
{
  if($query->title)
  {
    $new_title = $query->title;
  }
}

3 回答

  • 3

    看起来您可能误解了过滤机制的工作原理 . filter 是WordPress在特定时间使用某些参数调用的函数,并检索结果 . 这是对WordPress过滤器的一个不错的介绍:http://dev.themeblvd.com/tutorial/filters/

    您可能还想特别查看 wp_title 过滤器的文档页面,这样您就可以了解函数应该期望的参数:https://codex.wordpress.org/Plugin_API/Filter_Reference/wp_title

    执行您想要的代码看起来像这样:

    public function __construct() {
        //...
        add_filter( 'wp_title', array($this, 'custom_title'), 20);
    }
    
    public function view_content() {
    
        $query = $this->db->get_row('SELECT title FROM ...');
        $this->page_title = $query->title; 
    }
    
    public function custom_title($title) {
    
        if ($this->page_title) {
            return $this->page_title;
        }
    
        return $title;
    }
    
  • 0

    动作和过滤器钩子允许您在程序执行的某个点更改由Wordpress生成的内容 . 这些自定义更改是在附加到特定挂钩的函数内部进行的 .

    传递给附加函数的参数最初是由Wordpress生成的,第一个参数是要更改和返回的值,在 the_title hook的情况下,它是页面的 Headers .

    由于可以多次使用相同的过滤器,因此可以在附加的其他函数中修改该值,当您的函数完全转动时,取决于定义的优先级以及它们添加到过滤器的顺序 .

    过滤器和操作之间的区别在于,在第一种情况下,您需要返回一个值(已修改或原始),而操作是某种触发事件,您可以在其中打印某些内容 . 当然,您也可以定义和触发自己的自定义操作和过滤器 .

    可以在应用之前随时添加过滤器,并且挂钩的函数可以是匿名函数的形式,如下面的示例所示 .

    public function view_content() 
        {
            $query = $this->db->get_row( 'SELECT title FROM ...' );
    
            add_filter( 'wp_title', function( $title ) use ( $query ) {
                return $query->title;
            }, 20 );
        }
    

    或者,您可以将值保存为对象属性,稍后再使用它 .

    public function view_content() 
        {
            $query = $this->db->get_row( 'SELECT title FROM ...' );     
            $this->title = $query->title;
    
            add_filter( 'wp_title', array( $this, 'custom_title' ), 20 );
        }
    
        public function custom_title( $title ) 
        {
            return $this->title;
        }
    

    WP Plugin API
    PHP Anonymous functions
    PHP Class properties

  • 6

    Wordpress抱怨第二个参数,因为我假设该函数在一些地方使用,其中函数简单地用1参数调用就像现在一样 .

    public function custom_title($title, $new_title='') {
    return $new_title;
    }
    

    我假设您为函数添加了更多逻辑,但是通过这种方式,第二个参数是'已定义' . 这不是真正的'整洁'代码顺便说一句 .

    对于你的第二个问题;是的,你显然可以在对象中存储一些东西 . 您只需要在其中执行此操作即可查看代码的其他部分是否可以访问它 .

相关问题