2015-07-15 18 views
7

Tôi đã tạo một plugin WP sử dụng chuỗi truy vấn để lấy dữ liệu trang dựa trên những gì khách truy cập đã chọn. Rõ ràng điều này 'mô phỏng' các trang bổ sung nhưng tiêu đề trang không thay đổi từ bộ tiêu đề trong WP Admin.Đặt wp_title để thay đổi thẻ tiêu đề từ plugin?

Tôi đã cố gắng móc vào wp_title để thay đổi thẻ tiêu đề khi đang bay nhưng không thể làm việc này.

Chức năng sau đây hoạt động:

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

Ngay sau khi tôi cố gắng để vượt qua một biến với nó, nó không thành công.

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

WordPress phàn nàn nó thiếu đối số thứ 2, tôi đoán này có ý nghĩa kể từ khi chức năng đã được gọi vào tải trang ... Tôi đã hy vọng tôi có thể làm một cái gì đó giống như $this->custom_title($title, 'new title); trong Plugin của tôi, nhưng nó không giống như vậy là có thể?

Tôi đã đăng bài này ở đây vì tôi nghĩ đó là vấn đề chung về lớp PHP.

Tôi có thể toàn cầu hóa biến được trả lại hay không, ví dụ: Tôi muốn quay trở lại cột 'danh hiệu' từ một truy vấn trong một chức năng như $query->title

Khi chức năng chạy nó sẽ trả về dữ liệu từ cơ sở dữ liệu

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

bây giờ tôi cần $ query-> tiêu đề được thiết lập làm tiêu đề trang.

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

'view_content() 'không thực sự' bất cứ điều gì return' ... – rnevius

+0

Trong toàn bộ mã của tôi, tôi đang làm việc trong phạm vi chức năng, những gì tôi cần làm là tìm cách chuyển nó sang chức năng khác. – Goodbytes

Trả lời

6

Có vẻ như bạn có thể đã hiểu sai cơ chế bộ lọc hoạt động như thế nào. A filter là một hàm WordPress gọi với các tham số nhất định tại một thời điểm nhất định và truy xuất kết quả. Dưới đây là một giới thiệu phong nha để WordPress lọc: http://dev.themeblvd.com/tutorial/filters/

Bạn cũng có thể muốn kiểm tra các trang tài liệu cho wp_title lọc đặc biệt, do đó bạn sẽ hiểu những gì đối số chức năng của bạn nên mong đợi: https://codex.wordpress.org/Plugin_API/Filter_Reference/wp_title

mã mà những gì bạn muốn sẽ trông giống như sau:

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 phàn nàn về tham số thứ 2 vì tôi cho rằng hàm này được gọi đơn giản với 1 tham số giống như bây giờ.

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

Tôi giả sử bạn thêm logic vào hàm, nhưng theo cách này tham số thứ 2 được 'xác định'. Đây không phải là mã btw thực sự 'gọn gàng'.

Đối với câu hỏi thứ hai của bạn; có bạn rõ ràng có thể lưu trữ một cái gì đó trong một đối tượng. Nó chỉ là vấn đề nơi bạn làm điều này để xem nếu nó có thể truy cập bởi một phần khác của mã của bạn.

+0

Phần đối tượng là bit tôi đang đấu tranh với, tôi không chắc chắn làm thế nào để vượt qua nó vào chức năng đặt tiêu đề. – Goodbytes

3

Móc tác vụ và bộ lọc cho phép bạn thay đổi thứ gì đó được tạo bởi Wordpress tại một điểm nhất định của chương trình thực thi. Những thay đổi tùy chỉnh này được thực hiện bên trong một hàm được gắn vào một móc cụ thể.

Các tham số được chuyển đến hàm được đính kèm ban đầu được tạo bởi Wordpress, thông số đầu tiên là giá trị thay đổi và trả về, trong trường hợp móc the_title nó là tiêu đề của trang.

Vì cùng một bộ lọc có thể được sử dụng nhiều lần mà giá trị có thể được sửa đổi trong các chức năng khác được đính kèm, khi chính xác chức năng của bạn sẽ lần lượt phụ thuộc vào mức độ ưu tiên được xác định và thứ tự chúng được thêm vào bộ lọc.

Sự khác biệt giữa bộ lọc và hành động là trong trường hợp đầu tiên bạn cần trả lại giá trị (đã sửa đổi hoặc ban đầu), trong khi các hành động là một số loại sự kiện được kích hoạt nơi bạn có thể in ví dụ. Tất nhiên, bạn cũng có thể xác định và kích hoạt các hành động và bộ lọc tùy chỉnh của riêng mình.

Bộ lọc có thể được thêm vào bất kỳ lúc nào trước khi áp dụng và chức năng được nối có thể ở dạng chức năng ẩn danh như trong ví dụ bên dưới.

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

     add_filter('wp_title', function($title) use ($query) { 
      return $query->title; 
     }, 20); 
    } 

Hoặc bạn có thể lưu giá trị làm thuộc tính đối tượng và sử dụng sau này.

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

Các vấn đề liên quan