是否排除除管理区域之外的所有位置?

时间:2015-12-22 作者:Joe Bobby

目前我有:

if ( ($query->is_home() && $query->is_main_query()) || $query->is_archive() || $query->is_search() ) { ... }
我试过了!$query->is_admin() 但这似乎不起作用,是否有其他方法可以针对除管理区域以外的所有对象?我试图排除一个类别

1 个回复
SO网友:birgire

请注意,没有is_admin() 的方法WP_Query

但有趣的是,PHP不会对此抱怨:

$query->is_admin()
在哪里$query 是的实例WP_Query.

它总是返回false。

这就是为什么(#src):

/**
 * Make private/protected methods readable for backwards compatibility.
 *
 * @since 4.0.0
 * @access public
 *
 * @param callable $name      Method to call.
 * @param array    $arguments Arguments to pass when calling.
 * @return mixed|false Return value of the callback, false otherwise.
 */
 public function __call( $name, $arguments ) {
        if ( in_array( $name, $this->compat_methods ) ) {
                return call_user_func_array( array( $this, $name ), $arguments );
        }
        return false;
}
这是从PHP documentation:

__call() 在对象上下文中调用不可访问的方法时触发。

魔术__call 方法,在调用不存在的方法时生效is_admin().

我想你是在勾搭pre_get_posts 行动

我们可以使用is_admin() 检查:

add_action( \'pre_get_posts\', function( \\WP_Query $query )
{
    // Only on the front-end
    if( is_admin() )
        return;

    // ... your stuff here ...

} );
或者我们可以使用is_admin 的公共属性WP_Query 实例:

add_action( \'pre_get_posts\', function( \\WP_Query $query )
{
    // Only on the front-end
    if( $query->is_admin )
        return;

    // ... your stuff here ...

} );
事实上,它是基于is_admin() 函数,在parse_query() 方法(#src):

if ( is_admin() )
    $this->is_admin = true;

相关推荐

如何在WordPress unctions.php中将短代码值传递到Head

我正在尝试为wordpress帖子上的图表创建一个快捷代码。到目前为止,我已经使用了短代码,我可以看到短代码值正在被传递,但我需要知道的是如何将这些值传递到Google图表,以便正确工作。以下是我目前掌握的代码:function chart_shortcode($atts) { $a = shortcode_atts( array( \'value1\' => \'\', \'value2\' => \'\', \'value