5

我想为来自某个域的所有查询添加一个查询变量。

例如,mydomain.com 和 proxydomain.com 都显示相同的 WordPress 站点,但对于通过 proxydomain.com 访问的用户,我希望能够以不同的方式处理他们的查询。

此外,我想为来自 proxydomain.com 的访问者应用一些不同的 CSS 样式。

我在想我可以检查 query_var 并根据该变量的存在来应用类。

4

2 回答 2

10

这是要添加到您的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-comproxydomain-combody添加为页面标签的类,因此您可以针对自定义样式的相关类。

更新

对于查询,您可以再次添加一个函数,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 );
于 2015-04-18T01:58:12.393 回答
1

我喜欢第一部分的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复制而来的

于 2015-04-21T16:11:21.883 回答