2015-07-15 13 views
7

Utworzyłem wtyczkę WP, która używa ciągu zapytania, aby pobrać dane strony na podstawie tego, co wybrał użytkownik. Oczywiście to "symuluje" dodatkowe strony, ale tytuł strony nie zmienia się z tytułu ustawionego w WP Admin.Ustaw wp_title, aby zmienić tag tytułu z wtyczki?

Próbowałem podłączyć do wp_title, aby zmienić tag tytułu w locie, ale nie mogę go uruchomić.

Poniższa funkcja działa:

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

Jak tylko próbuję przekazać zmienną do niego, to się nie powiedzie.

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

WordPress narzeka, że ​​brakuje 2nd argumentu, myślę, że to ma sens, ponieważ funkcja jest wywoływana po załadowaniu strony ... Miałem nadzieję, że mogę zrobić coś takiego $this->custom_title($title, 'new title); w moim plugin, ale to nie wygląda jak to będzie możliwe?

Opublikowałem to tutaj, ponieważ uważam, że jest to ogólny problem klasy PHP.

Czy mogę dokonać globalizacji zwróconej zmiennej, np. Chcę zwrócić „title” kolumnę z kwerendy w innej funkcji, takich jak $query->title

Gdy funkcja działa zwraca dane z bazy danych

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

muszę teraz $ query-> tytuł należy ustawić jako tytuł strony.

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

'view_content()' 'faktycznie nie return' cokolwiek ... – rnevius

+0

W całym moim kodzie pracuję wewnątrz funkcji, co ja trzeba zrobić, to znaleźć sposób, aby przekazać go do innej funkcji. – Goodbytes

Odpowiedz

6

Wygląda na to, że źle zrozumiałeś działanie mechanizmu filtrującego. A filter to funkcja wywołania WordPress z określonymi parametrami w określonym czasie i pobiera wynik. Tutaj jest przyzwoity wprowadzenie filtrów WordPress: http://dev.themeblvd.com/tutorial/filters/

Można też sprawdzić stronę dokumentacji na filtrze w szczególności wp_title, więc można zrozumieć, jakie argumenty czynność należy się spodziewać: https://codex.wordpress.org/Plugin_API/Filter_Reference/wp_title

kod to, co chcesz, będzie wyglądało mniej więcej tak:

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 narzeka 2. parametr bo zakładamy, że funkcja jest używana w kilku miejscach, w których funkcja jest nazywana po prostu z 1 paramter tak jak jest teraz.

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

Zakładam, że dodajesz więcej funkcji do funkcji, ale w ten sposób drugi parametr jest "zdefiniowany". To nie jest tak naprawdę "zgrabny" kod btw.

Za drugie pytanie; tak, oczywiście możesz przechowywać coś w obiekcie. Ważne jest tylko to, gdzie to robisz, aby sprawdzić, czy jest dostępny w innej części kodu.

+0

Część obiektu, z którą walczę, nie wiem, jak przekazać ją do funkcji ustawiającej tytuł. – Goodbytes

3

Akcja i filtry pozwalają zmienić coś wygenerowanego przez Wordpress w określonym momencie wykonywania programu. Te niestandardowe zmiany są wprowadzane wewnątrz funkcji, która jest dołączona do określonego haka.

Parametry przekazywane do dołączonej funkcji są pierwotnie generowane przez Wordpress, pierwszym parametrem jest wartość do zmiany i powrotu, w przypadku haka the_title jest to tytuł strony.

Ponieważ ten sam filtr może być używany wielokrotnie, wartość ta może być modyfikowana w innych dołączonych funkcjach, kiedy dokładnie funkcja będzie miała swoją kolej, zależy od zdefiniowanego priorytetu i kolejności, w jakiej są dodawane do filtra.

Różnica między filtrami i działaniami polega na tym, że w pierwszym przypadku należy zwrócić wartość (zmodyfikowaną lub oryginalną), podczas gdy działania są zdarzeniami wyzwalanymi, w których można na przykład wydrukować coś. Oczywiście możesz także definiować i uruchamiać własne niestandardowe akcje i filtry.

Filtr można dodać w dowolnym momencie przed jego zastosowaniem, a funkcja zawieszona może mieć postać anonimowej funkcji, jak w przykładzie poniżej.

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

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

Lub możesz zapisać wartość jako właściwość obiektu i użyć jej później.

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

Powiązane problemy