在不需要(或显示)某些内容(或数据)时禁用(或限制)查询

时间:2012-06-15 作者:DarkGhostHunter

目前,我正在为一个网站定制设计。我在Wordpress中看到的问题是几乎所有从数据库中取出的数据。

而在某些页面,如头版。php-例如,它只需要标题、类别、两个meta和摘录,WP就可以获取所有内容。见鬼,帖子内容只在post single中可见。php,但WP会尽可能地提取所有内容、标记、guid、标记等(print\\r非常有用)。

问题是如何限制从他的查询中提取的Wordpress数据。我认为我应该基于$wpdb创建一个网络“WP\\u查询”(或覆盖它),并将其用于站点,而不是使用默认查询。至少功能如下query_posts, WP_Query and get_posts 不允许我限制提取的数据。

我还对缓存数据感兴趣,因为它非常小,但这是第一次。

Update 1: 试图“最小化数据”:

    add_action( \'pre_get_posts\', \'disable_main_query\' );
function disable_main_query( $query ) {
    if( $query->is_main_query() && $query->is_front_page() ) {
        add_filter(\'posts_fields\', \'minimized_data\');
    }
}

function minimized_data($fields) {
    global $wpdb;
    $fields = "
        $wpdb->posts.ID,
        $wpdb->posts.post_title,
        $wpdb->posts.post_excerpt,
        $wpdb->posts.comment_count,
        $wpdb->posts.guid,
        $wpdb->posts.post_status,
        $wpdb->posts.post_name,
        $wpdb->posts.post_date,
        $wpdb->posts.post_type
    ";
    return $fields;
}
Mow默认循环存在“未定义属性:stdClass::$post\\u XXXX”和其他问题。我想现在该怪那篇文章了,所以我在查。

Update 2: 已经预料到了。更改了while 循环用于foreach ($posts as $post) 没有更多未定义的属性,但如前所述,我无法摆脱ob_end_flush() [ref.outcontrol]: failed to delete buffer zlib output compression.

Update 3: define( \'SAVEQUERIES\', FALSE ); 并且没有更多失败的缓冲区(用于WAMP)。

2 个回复
最合适的回答,由SO网友:fuxia 整理而成

您可以筛选\'posts_fields\', 检查是否is the main query 并将查询的字段限制为…您需要的任何内容
请参见WP_Query::get_posts() 在里面/wp-includes/query.php 了解详情和副作用。

为了调试查询,我建议使用插件Debug Bar. 如果您添加…

define( \'WP_DEBUG\',         TRUE );
define( \'SAVEQUERIES\',      TRUE );
…到您的wp-config.php 您可以看到结果查询以及它如何影响以后的查询。

SO网友:DarkGhostHunter

After some digging, 似乎“只获取所需内容”的唯一方法是使用de class$wpdb与数据库进行对话。这意味着还有第二个循环,在主循环之外。

现在,为了提高性能,应该有一种方法可以修改Wordpress经常执行的主/默认循环,以避免获取帖子内容和其他无用数据(对于站点)。

结束

相关推荐

如何使用wp_Query进行WordPress搜索?

我想创建一个自定义搜索表单,根据大约4个自定义字段的值搜索帖子。我尝试使用wp\\u query来实现这一点,但到目前为止,我最大的问题是,在自定义字段中搜索数据时,我没有得到任何结果,即使是我确定存在的数据。此外,我不知道如何删除普通的WordPress“关键字”搜索框,而只使用我的四个组合框。这是我搜索的代码。php文件:http://pastie.org/private/jhgsmaolvjyswyhsfphlfa这是我搜索表单中的代码。php:粘贴。org/private/o3hrtqajh8hb