2015-04-14 13 views
5

Vorrei aggiungere una variabile di query a tutte le query provenienti da un determinato dominio.WordPress query_var per dominio

Ad esempio, mydomain.com e proxydomain.com mostrano entrambi lo stesso sito WordPress, ma per gli utenti che visitano tramite proxydomain.com, mi piacerebbe essere in grado di gestire le loro domande in modo diverso.

Inoltre, mi piacerebbe applicare alcuni stili CSS diversi per i visitatori provenienti da proxydomain.com.

Stavo pensando di controllare la query_var e applicare le classi in base alla presenza di tale variabile.

+0

e qual è la domanda esattamente? – motto

+0

NON è quello che hai chiesto (e come tale sto facendo un commento invece di una risposta), ma potresti facilmente usare $ _SERVER ['REMOTE_HOST'] per ottenere le richieste ed eseguire confronti su questo. –

+1

cioè if ($ _ SERVER [ 'REMOTE_HOST'] === 'proxydomain.com') {// fare alcune cose specifiche ProxyDomain o assegnare una variabile } –

risposta

10

Questo è il codice da aggiungere al functions.php del file:

add_filter('body_class', 'domain_as_body_class'); 
function domain_as_body_class($classes) { 
    $classes[] = sanitize_title($_SERVER['SERVER_NAME']); 
    return $classes; 
} 

si aggiunge il dominio igienizzato del vostro sito (cioè mydomain-com o proxydomain-com) come classe del body tag delle tue pagine, in modo da poter indirizzare la classe relativa per gli stili personalizzati.

Aggiornamento

Per le query si potrebbe aggiungere una funzione di nuovo in functions.php come:

function is_proxydomain() { 
    return 'proxydomain.com' == $_SERVER['SERVER_NAME']; 
} 

e quindi utilizzarlo in caso di necessità su una query:

if(is_proxydomain()) { 
    $args = array(
     // arguments for proxydomain.com 
    ); 
} else { 
    $args = array(
     // arguments for mydomain.com 
    ); 
} 

$query = new WP_Query($args); 
1

Mi piace la risposta di d79 per la prima parte.

Per le query, penso che sarebbe meglio estendere la classe WP_Query (cioè WP_Query_Custom) e disporre di una copia per ciascun dominio. Quindi puoi caricare il file che ti serve in base al dominio nel file functions.php, e quindi non devi cambiare in futuro le tue chiamate ovunque usi WP_Query_Custom, anche se devi aggiungere più domini e diverse versioni di WP_Query_Custom.

//in functions.php 
$mydomain = str_replace('.', '_', $_SERVER['SERVER_NAME']); 
require_once("path/to/my/classes/$mydomain/WP_Query_Custom.php"); 

//In each path/to/my/classes/$mydomain/WP_Query_Custom.php 

class WP_Query_Custom extends WP_Query { 

function __construct($args = array()) { 
    // Force these args 
    $args = array_merge($args, array(
     'post_type' => 'my_custom_post_type', 
     'posts_per_page' => -1, // Turn off paging 
     'no_found_rows' => true // Optimize query for no paging 
    )); 

    add_filter('posts_where', array($this, 'posts_where')); 


    parent::__construct($args); 

    // Make sure these filters don't affect any other queries 
    remove_filter('posts_where', array($this, 'posts_where')); 
} 



function posts_where($sql) { 
    global $wpdb; 
    return $sql . " AND $wpdb->term_taxonomy.taxonomy = 'my_taxonomy'"; 
} 
} 

La classe esempio viene copiato dal extending WP_Query

+0

Si dovrebbe, ovviamente, provare per il file esistenza, come 'Codice delle se (file_exists ("path/to/mio/classes/$ mydomain/WP_Query_Custom.php")) {// carico } else {// errore maniglia } 'Codice delle – appartisan

Problemi correlati