WordPress query_var 按域
WordPress query_var by domain
我想为来自特定域的所有查询添加一个查询变量。
例如,mydomain.com 和 proxydomain.com 都显示相同的 WordPress 站点,但对于通过 proxydomain.com 访问的用户,我希望能够以不同方式处理他们的查询。
此外,我想为来自 proxydomain.com 的访问者应用一些不同的 CSS 样式。
我想我可以检查 query_var 并根据该变量的存在应用 类。
这是要添加到您的 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
标记的 class,因此您可以定位自定义样式的相对 class。
更新
对于查询,您可以在 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 );
第一部分我喜欢 d79 的回答。
对于查询,我认为最好扩展 WP_Query class(即 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'";
}
}
示例class 复制自extending WP_Query
我想为来自特定域的所有查询添加一个查询变量。
例如,mydomain.com 和 proxydomain.com 都显示相同的 WordPress 站点,但对于通过 proxydomain.com 访问的用户,我希望能够以不同方式处理他们的查询。
此外,我想为来自 proxydomain.com 的访问者应用一些不同的 CSS 样式。
我想我可以检查 query_var 并根据该变量的存在应用 类。
这是要添加到您的 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
标记的 class,因此您可以定位自定义样式的相对 class。
更新
对于查询,您可以在 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 );
第一部分我喜欢 d79 的回答。
对于查询,我认为最好扩展 WP_Query class(即 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'";
}
}
示例class 复制自extending WP_Query