处理多个元价值,30+

时间:2014-05-09 作者:Howdy_McGee

我有一个包含30多个元键的“列表”帖子类型,当有100多篇帖子时,我觉得这可能会对数据库造成压力。通常我所做的是将每个元值按1逐1保存,如下所示:

if(isset($_POST[\'_item_stock\']) && !empty($_POST[\'_item_stock\']))
    update_post_meta($post_id, \'_item_stock\', sanitize_text_field($_POST[\'_item_stock\']));
else
    delete_post_meta($post_id, \'_item_stock\');
我这样做是因为如果我需要对验证进行更多的控制,我就有了它。代码中组织有序,外观美观。The Drawback 因为它很长,而且它将每个元单独保存在数据库中。

我的另一个选择是将所有元标准化为一个数组,然后将其序列化。The Drawback 对于这种方法,我不能对序列化数据运行任何元查询,因此过滤搜索或后期排序是不可能的。

最后一个选项是对半执行,序列化查询不需要的内容以及我单独保存的所有其他内容。虽然这可能会节省一些开销,但我不希望代码看起来很凌乱或有任何断开连接的情况。

我的问题是-你通常如何处理有许多元键的帖子?当我单独保存每个元键时,数据库开销是否像我想象的那样糟糕?你认为哪种方法最好?为什么?

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

您正面临XY Problem. 这个only reason 要将每个元值保存为一行,如果您需要它们可以搜索的话。如果需要特定的卫生处理规则,请使用filter_var_array() 或者清理值,然后构建数组并最终保存值。

Gist with a comprehensive filter_var_array() example here.

结束

相关推荐

Search using WP_Query

我正在使用以下内容WP_Query 在我的search.php 模板,以便仅搜索“产品”自定义帖子类型。出于某种原因,它会返回带有一些搜索词的其他帖子类型。你知道我哪里做错了吗?<?php global $query_string; ?> <?php $query_args = explode(\"&\", $query_string); ?> <?php $search_query = array( \'post_type\' =