WP_QUERY-从归档的延迟加载中排除第一个缩略图

时间:2021-06-21 作者:tw8sw8dw8

我有一个函数,可以更改加载;“懒惰”;到加载=“”;急切的“;从类别和标记中的第一个缩略图。问题是,此函数从帖子和页面中删除帖子缩略图。我试图有条件地排除帖子和页面!is\\u single()&&!is\\u page(),但不起作用:

add_filter( \'wp_get_attachment_image_attributes\', function( $attrs ) {
    if ( !is_single() && !is_page() && is_front_page() && is_archive() && is_search() ) {
    global $wp_query;

    if ( $wp_query->current_post === 0 )
        $attrs[\'loading\'] = \'eager\';
        return $attrs;
    }
} );

1 个回复
SO网友:Tom J Nowell

过滤器必须always 返回一个值。如果不返回值,则与返回空值相同,null, 等。这始终是第一个参数,或其修改/替换版本。

因此:

add_filter( \'wp_get_attachment_image_attributes\', function( $attrs ) {
    if ( !is_single() && !is_page() && is_front_page() && is_archive() && is_search() ) {
        global $wp_query;

        if ( $wp_query->current_post === 0 )
            $attrs[\'loading\'] = \'eager\';
            return $attrs;
        }
    }
);
与此相同:

add_filter( \'wp_get_attachment_image_attributes\', function( $attrs ) {
    if ( !is_single() && !is_page() && is_front_page() && is_archive() && is_search() ) {
        global $wp_query;

        if ( $wp_query->current_post === 0 )
            $attrs[\'loading\'] = \'eager\';
            return $attrs;
        } else {
            // I don\'t want post thumbnails, return nothing
            return null;
        }
    }
    // I don\'t want post thumbnails, return nothing
    return null;
);
记住,过滤器是WordPress临时向您传递一个值,然后您将其返回给WordPress,允许您更改它。

您的代码所做的相当于在满足某些标准(变懒惰为渴望)的情况下,通过更改将其发回,但如果它不满足这些标准,而不是原封不动地发回,那么您就点燃了它并将其丢弃。

如果我们向函数中添加类型提示,那么PHP致命错误会使错误更加明显:

add_filter( \'wp_get_attachment_image_attributes\', function( $attrs ) : array {
函数需要返回一个值,通过这样做,我们告诉PHP它总是返回一个数组。因此,当加载不是第一篇帖子的帖子或不是搜索存档的页面等时,该功能不会return 它将生成一个PHP致命错误,而不是警告。

您还应该注意到,PHP错误日志将包含此函数的PHP警告。

要解决此问题,需要更改过滤器,使其始终返回值。由于过滤器不返回任何内容,因此不会获得post缩略图。如果不想更改属性,请按原样返回属性return $attrs;. 过滤器always 归还一些东西

相关推荐

发布POST时未调用post.php AJAX请求

我正在使用transition_post_status 处理正在发布的帖子。我在WordPress的两个安装之间发现了不一致的行为,我已经跟踪到了从post compose页面本身发出的AJAX调用。以下是我在两次安装中将帖子从草稿转换为发布时提出的请求:如您所见,对post的AJAX调用。在第二个示例中,没有生成php。事实证明$post 对象在内部处于不同的状态transition_post_status 通过post呼叫时挂断。php,这就是为什么我的代码只在第一次安装时起作用。我需要理解的是,为什