WordPress query_var по домену

Я хотел бы добавить переменную запроса ко всем запросам, поступающим из определенного домена.

Например, mydomain.com и proxydomain.com показывают один и тот же сайт WordPress, но для пользователей, которые посещают через proxydomain.com, я хотел бы иметь возможность обрабатывать их запросы по-разному.

Кроме того, я хотел бы применить несколько разных стилей CSS для посетителей, которые приходят через proxydomain.com.

Я думал, что смогу проверить query_var и применить классы, основываясь на наличии этой переменной.

5

Решение

Это код для добавления в ваш functions.php файл:

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

Он добавляет очищенный домен вашего сайта (т.е. mydomain-com или же proxydomain-com) как класс body тег ваших страниц, так что вы можете настроить относительный класс для пользовательских стилей.

Обновить

Для запросов вы можете добавить функцию снова в functions.php лайк:

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

А затем используйте его при необходимости в запросе:

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

$query = new WP_Query( $args );
10

Другие решения

Мне нравится ответ D79 для первой части.

Я думаю, что для запросов было бы лучше расширить класс WP_Query (т.е. WP_Query_Custom) и иметь одну копию для каждого домена. Затем вы можете загрузить нужный вам файл на основе домена в файле functions.php, и вам не нужно будет в будущем изменять ваши звонки везде, где вы используете WP_Query_Custom, даже если вам нужно добавить больше доменов и разные версии 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'";
}
}

Пример класса скопирован из расширение WP_Query

1

По вопросам рекламы [email protected]