在嵌套的Foreach循环中从wp数据库中提取自定义字段值

时间:2012-08-30 作者:robin

我试图在我的模板值上显示自定义字段,我正在从Posteta表中提取这些字段循环出错或没有正确写入foreach参数不确定代码的问题是什么PasteBin链接http://pastebin.com/eyPD6Qws

基本上我想显示15个div和3个col(名称、照片、地区)

为了更简单地解释我正在做的事情,我使用了一个名为flift的插件(是的,我知道它现在已经死了),但它对我有效。我正在为代理创建个人资料,这些个人资料页面工作得很好,但现在我想创建一个页面,在其中显示每个人的个人资料的小摘要(就像我们有公文包页面),我已经为其创建了代码(可以在这里看到http://pastebin.com/eyPD6Qws)

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

回答我的问题,最终解决了(笑脸){

            global $wpdb;  
        $broker_names = $wpdb->get_results("SELECT meta_value
            FROM $wpdb->postmeta 
            WHERE meta_key = \'B_name\'  ORDER BY  meta_id DESC  ", ARRAY_A);  
        $b_region = $wpdb->get_results("SELECT meta_value
            FROM $wpdb->postmeta 
            WHERE meta_key = \'Region\' ORDER BY  meta_id DESC ", ARRAY_A);

            $b_photo = $wpdb->get_results("SELECT meta_value
            FROM $wpdb->postmeta 
            WHERE meta_key = \'Photo\' ORDER BY  meta_id DESC ", ARRAY_A); 


                for($d=0; $d<=count($b_names); $d++)
                {
                    echo \'<div id="b-group"><dl class="b-badge">\';
                    echo \'<dt class="b-image">\';
                    echo \'<img src=\'.get_site_url().\'/wp-content/files_flutter/\'.$broker_photo[$d][\'meta_value\'].\' /></dt> \';
                    echo \'<dd class="b-name"><span>\'. $b_names[$d][\'meta_value\'].\'</span>\'; 
                    echo \'</dd><dd class="b-region">\';
                    $r_region = $b_region[$d][\'meta_value\'];
                    $new_region = unserialize($r_region);
                    echo \'  \'.$new_region[0].\'</dd> \';  
                    echo \'</dl></div>\';

                }
}

SO网友:Puneet Sahalot

从技术上讲,您应该使用WP的内置类WP_Query 获取信息,我相信这将简化您的整个过程。

SO网友:kaiser

使用简单的循环。在循环内部使用基本模板函数调用元数据get_post_custom().

// Short\'n\'dirty...
if ( have_posts() ) : while ( have_posts() ) : the_post();

    $meta = get_post_custom( get_the_ID() );

    echo "\\n<hr />{$GLOBALS[\'post\']->post_title} Custom Data:\\n<pre>".var_export( $meta, true ).\'</pre>\';

endwhile; endif;

结束