是否可以同时检索帖子及其元数据?

时间:2012-04-23 作者:flashape

我通常使用两个步骤来检索帖子列表和相关元数据:调用get\\u posts(或自定义WP\\u查询),然后遍历返回的每个帖子,逐个检索每个帖子的元数据。

有没有办法将此合并到单个查询中?我想我在寻找像get\\u posts\\u with\\u meta()函数这样的函数?

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

不值得这样做,因为这将是一个复杂的查询,并且会与大多数wp缓存解决方案相冲突。

SO网友:kaiser

这不是一个简单的步骤,但很容易编写&;代码中的句柄:get_post_custom() 给你all 附加元数据。但请注意:所有内容都是数组,即使是单个值。所以

// Ever entry comes like this.
// Example single value for \'Hair color\':
Array(
    [0] => Array(
        \'Brown\'
    )
)

SO网友:Adam

下面是一段代码source: WPSnipp.com

将此放在您的函数中。php文件。。。

function get_post_meta_all($post_id){
    global $wpdb;
    $data   =   array();
    $wpdb->query("
        SELECT `meta_key`, `meta_value`
        FROM $wpdb->postmeta
        WHERE `post_id` = $post_id
    ");
    foreach($wpdb->last_result as $k => $v){
        $data[$v->meta_key] =   $v->meta_value;
    };
    return $data;
}
或者使用get\\u post\\u custom()可以做到这一点;

将此放在您的函数中。php文件。。。

if ( !function_exists(\'base_get_all_custom_fields\') ) {
    function base_get_all_custom_fields()
    {
        global $post;
        $custom_fields = get_post_custom($post->ID);
        $hidden_field = \'_\';
        foreach( $custom_fields as $key => $value ){
            if( !empty($value) ) {
                $pos = strpos($key, $hidden_field);
                if( $pos !== false && $pos == 0 ) {
                    unset($custom_fields[$key]);
                }
            }
        }
        return $custom_fields;
    }
}
然后在主题文件中,您可以执行以下操作:;

$custom_fields = base_get_all_custom_fields();
if( !empty($custom_fields) ) {
    print_r($custom_fields);
}
来源:HERE

结束

相关推荐