2015-07-15 25 views
7

Ho creato un plug-in WP che utilizza la stringa di query per inserire i dati della pagina in base a ciò che il visitatore ha selezionato. Ovviamente questo 'simula' pagine aggiuntive ma il titolo della pagina non cambia dal set di titoli in WP Admin.Imposta wp_title per cambiare il tag del titolo dal plugin?

Ho cercato di connettersi allo wp_title per modificare il tag del titolo al volo ma non riesco a farlo funzionare.

La seguente funzione funziona:

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

Appena provo a passare una variabile ad esso, non riesce.

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

WordPress si lamenta che manca il secondo argomento, credo che questo ha un senso in quanto la funzione è chiamata a caricamento della pagina ... Speravo che potrei fare qualcosa di simile $this->custom_title($title, 'new title); all'interno del mio plug-in, ma non sembra così sarà possibile?

Ho postato questo qui perché penso che sia un problema generale di classe PHP.

Posso globalizzare una variabile restituita, ad es. Voglio tornare alla colonna 'titolo' da una query in un'altra funzione come $query->title

Quando la funzione viene eseguito restituisce i dati dal database

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

io adesso ho bisogno di $ query-> titolo da impostare come titolo della pagina.

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

'view_content()' in realtà non 'return' nulla ... – rnevius

+0

In tutto il mio codice sto lavorando all'interno della funzione, quello che ho è necessario trovare un modo per passarlo a un'altra funzione. – Goodbytes

risposta

6

Sembra che tu abbia frainteso il funzionamento del meccanismo del filtro. A filter è una funzione che WordPress chiama con determinati parametri in un dato momento e recupera il risultato. Ecco un'introduzione decente per filtri WordPress: http://dev.themeblvd.com/tutorial/filters/

Si consiglia inoltre di controllare la pagina di documentazione per il filtro wp_title in particolare, in modo da avrebbe capito quali argomenti la funzione dovrebbe aspettare: https://codex.wordpress.org/Plugin_API/Filter_Reference/wp_title

Il codice che fa quello che si vuole sarebbe simile a questa:

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 si lamenta del 2 ° parametro perché presumo la funzione viene utilizzata in alcuni luoghi dove la funzione si chiama semplicemente con 1 paramter proprio come lo è ora.

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

presumo si aggiungono più logica per la funzione, ma con questo modo il secondo parametro è 'definito'. Questo non è un codice veramente 'accurato' btw.

Per la seconda domanda; sì, puoi ovviamente conservare qualcosa in un oggetto. Importa solo dove lo fai per vedere se è accessibile da un'altra parte del tuo codice.

+0

La parte dell'oggetto è il bit con cui sto lottando, non sono sicuro di come passarlo alla funzione che imposta il titolo. – Goodbytes

3

azione e ganci di filtro consente di modificare qualcosa generato da Wordpress a un certo punto di esecuzione del programma. Queste modifiche personalizzate vengono eseguite all'interno di una funzione collegata a un hook specifico.

I parametri passati a una funzione collegata sono originariamente generati da Wordpress, il primo parametro è un valore da modificare e restituire, nel caso di the_title hook è il titolo della pagina.

Poiché lo stesso filtro può essere utilizzato più volte che il valore può essere modificato in altre funzioni collegate, quando esattamente la vostra funzione avrà il suo turno dipende dalla priorità definita e dall'ordine in cui vengono aggiunte al filtro.

La differenza tra i filtri e le azioni è che nel primo caso è necessario restituire un valore (modificato o originale), mentre le azioni sono una sorta di eventi attivati ​​in cui è possibile, ad esempio, stampare qualcosa. Naturalmente, puoi anche definire e attivare le tue azioni e i tuoi filtri personalizzati.

Il filtro può essere aggiunto in qualsiasi momento prima che venga applicato e la funzione collegata può essere sotto forma di funzione anonima, come nell'esempio seguente.

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

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

Oppure è possibile salvare il valore come proprietà dell'oggetto e utilizzarlo in un secondo momento.

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

Problemi correlati