2015-07-15 34 views
7

Ziyaretçinin seçtiğine göre sayfa verilerini çekmek için sorgu dizesini kullanan bir WP eklentisi oluşturdum. Açıkçası bu 'ek sayfaları' simüle eder, ancak sayfa başlığı WP Yönetiminde ayarlanan başlıktan değişmez.Başlık etiketini eklentiden değiştirmek için wp_title'yi ayarlayın?

Başlık etiketini anında değiştirmeye çalışmak için wp_title numaralı telefona bağlanmaya çalışıyordum ancak bunu çalıştıramıyor.

aşağıdaki fonksiyonu çalışır:

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

En kısa zamanda buna bir değişken geçirmek çalışırken, başarısız olur.

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

WordPress ben fonksiyon Sayfanın yüklendiği çağrılan beri bu ... benim eklenti içinde $this->custom_title($title, 'new title); gibi bir şey umuyordum mantıklı sanırım o 2 argüman eksik şikayet ama görünmüyor Bunun gibi mümkün olacak?

Bunu buraya gönderdim çünkü genel bir PHP sınıfı sorunu olduğunu düşünüyorum.

Dönen değişkeni globalleştirebilir miyim, ör. işlevi

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

Şimdi $ query-> başlık ayarlanması gerekir veritabanından veri döndürür çalıştırıldığında başka fonksiyonu gibi $query->title

bir sorgudan 'title' sütununu dönmek istiyorum sayfa başlığı olarak. Ben fonksiyonu işlevi sadece şimdi olduğu gibi 1 Paramtre ile çağrılır birkaç yerde kullanılır varsayalım çünkü

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

'view_content()' yapar ben işlev içinde çalışıyorum benim tüm kodu aslında 'return' şey ... – rnevius

+0

, ne yapmanız gereken başka bir işleve geçmek için bir yol bulmaktır. – Goodbytes

cevap

6

Filtre mekanizmasının nasıl çalıştığını yanlış anlamış olabilirsiniz. Bir filter, belirli bir zamanda belirli parametrelerle WordPress çağırır ve sonucu alır. İşte WordPress filtrelere iyi bir giriş: http://dev.themeblvd.com/tutorial/filters/

Ayrıca özellikle wp_title filtre için dokümantasyon sayfasını kontrol etmek isteyebilirsiniz, bu nedenle anlardın senin işlevi beklemek gerektiğini argümanlar: https://codex.wordpress.org/Plugin_API/Filter_Reference/wp_title

kodu olduğunu

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 2 parametre şikayetçi.

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

Sana işlevine daha mantığı eklemek varsayalım, ancak bu yolla 2 parametre 'tanımlı' olduğu. Bu gerçekten 'temiz' kod btw değil.

İkinci sorunuz için; evet belli ki bir nesnedeki bir şeyi saklayabilirsin. Sadece kodunuzun başka bir bölümü tarafından erişilebilir olup olmadığını görmek için bunu yaptığınız yerde önemlidir.

+0

Nesne kısmı ile uğraştığım şey, başlığını belirleyen işleve nasıl iletileceğinden emin değilim. – Goodbytes

3

Eylem ve filtre kanca program yürütme belirli bir noktada Wordpress tarafından oluşturulan bir şeyi değiştirmek için izin verir: böyle bir şey olmazdı istediğimizi yapar. Bu özel değişiklikler, belirli bir kancaya bağlı bir işlev içinde yapılır.

Eklenen bir işleve geçirilen parametreler, Wordpress tarafından oluşturulur; ilk parametre, değiştirilecek ve geri dönecek bir değerdir, the_title kanca olması durumunda, sayfanın adıdır.

Aynı filtre birden çok kez kullanılabildiğinden, diğer işlevler ekli olarak değiştirilebildiğinden, tam olarak sizin işleviniz sıralandığında, tanımlanan öncelik ve filtreye eklenme sırasına göre değişir.

Filtreler ve eylemler arasındaki fark, ilk durumda bir değeri (değiştirilmiş veya orijinal) döndürmeniz gerektiğinde, eylemler, örneğin, bir şey yazdırabileceğiniz bir tür tetiklenmiş olaylardır. Elbette, kendi özel işlemlerinizi ve filtrelerinizi tanımlayabilir ve tetikleyebilirsiniz.

Filtre, uygulanmadan önce herhangi bir zamanda eklenebilir ve çengelli işlev, aşağıdaki örnekte olduğu gibi anonim işlev biçiminde olabilir. Veya değeri bir nesne özelliği olarak kaydedip daha sonra kullanabilirsiniz.

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

İlgili konular