我还可以对查询做些什么,以尽可能少的工作来消除PHP中由于我的查询太宽而被查询的“额外”帖子。
问题是,meta queries are slow. 元数据是一个简单的键=>值类型数据库。键被索引,值被longtext
. 就是这样。没有数据类型。无其他索引。没有什么更不用说每一条“规则”都会让你JOIN
.
它们可以用于简单的过滤器/开关/比较,但越复杂,就越有可能需要使用其他东西。
对于月视图,我只显示帖子类别、event\\u日期、标题和每天的帖子总数。是否可以仅查询此数据以加快查询速度?
如果可以将存储的日期格式更改为MySQL的默认格式(YYYY-MM-DD
), 然后,您可以使用元查询的强制转换功能进行日期比较:
array(
\'key\' => \'event_date\',
\'type\' => \'DATE\',
\'compare\' => \'BETWEEN\',
\'value\' => array(
date( \'Y-m-01\', $time = current_time( \'timestamp\' ) ),
date( \'Y-m-t\', $time ), // Last day of current month
),
),
这可能会起到提振作用,但不能保证。
如果所有这些都失败了,那么在WordPress中处理此类数据的更好方法是什么?我宁愿远离日历插件,以某种方式使用“帖子”。
毫无疑问,另一张桌子。主索引将是post ID,然后是存储任意事件数据的后续列。我不是db模式的天才,您最好在另一个StackExchange上针对您的问题寻求建议。
钩住save_post
用于更新表,并使用posts_clauses
在中找到WP_Query::get_posts()
要实现联接和自定义查询,请执行以下操作:
function wpse_175152_posts_clauses( $clauses, $wp_query ) {
$clauses[ \'where\' ];
$clauses[ \'groupby\' ];
$clauses[ \'join\' ];
$clauses[ \'orderby\' ];
$clauses[ \'distinct\' ];
$clauses[ \'fields\' ];
$clauses[ \'limits\' ];
return $clauses;
}
add_filter( \'posts_clauses\', \'wpse_175152_posts_clauses\', 10, 2 );