如何有效地检索多个GET_POST_META值?

时间:2011-07-09 作者:mmaximalist

我正在寻找返回多个get\\u post\\u元数据的解决方案。。。

当前我使用的meta box数组如下所示:

$meta_boxes[] = array(
\'id\' => \'setlist\',
\'title\' => \'Setlist Information\',
\'pages\' => array(\'post\'),
\'fields\' => array(
    array(
        \'name\' => \'Setlist 1\',                  // field name
        \'desc\' => \'Entry 1\',                                    // field description, optional
        \'id\' => $prefix . \'setlist_1\',              // field id, i.e. the meta key
        \'type\' => \'text\',                   // text box
        \'std\' => \'\',                                            // default value, optional
        \'style\' => \'width: 100px\',              // custom style for field, added in v3.1
    ),
            array(
        \'name\' => \'Setlist 2\',                  
        \'desc\' => \'Entry 2\',                                    
        \'id\' => $prefix . \'setlist_2\',              
        \'type\' => \'text\',                                       
        \'std\' => \'\',                                            
        \'style\' => \'width: 100px\',              
    ),
依此类推(即setlist\\u 3,4,5,6,7,8….)

在我的单曲里。php我有:

<?php if ( get_post_meta( $post->ID, \'rw_setlist_1\', true ) ) : echo "<li>"; echo get_post_meta( $post->ID, \'rw_setlist_1\', true ); echo "</li>"; ?>
<?php endif; ?>
<?php if ( get_post_meta( $post->ID, \'rw_setlist_2\', true ) ) : echo "<li>"; echo get_post_meta( $post->ID, \'rw_setlist_2\', true ); echo "</li>"; ?>
 <?php endif; ?>
 <?php if ( get_post_meta( $post->ID, \'rw_setlist_3\', true ) ) : echo "<li>"; echo get_post_meta( $post->ID, \'rw_setlist_3\', true ); echo "</li>"; ?>
 <?php endif; ?>
 <?php if ( get_post_meta( $post->ID, \'rw_setlist_4\', true ) ) : echo "<li>"; echo get_post_meta( $post->ID, \'rw_setlist_4\', true ); echo "</li>"; ?>
 <?php endif; ?>
 <?php if ( get_post_meta( $post->ID, \'rw_setlist_5\', true ) ) : echo "<li>"; echo get_post_meta( $post->ID, \'rw_setlist_5\', true ); echo "</li>"; ?>
设置列表值的范围从2到30。。。

说我疯了,但我觉得这种方法会导致不必要的长时间加载,对吗?那么,我该如何为此创建一个更高效的脚本,以“更简单的方式”检查数组中的所有值呢。

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

您的代码设置方式是错误的,您正在为每个自定义字段进行两次数据库调用,如果您有2-30个这样的字段,那么这意味着您可以使用get_post_custom()对于ex:

$custom_fields = get_post_custom($post->ID);
for ($i = 1; $i <= 30; $i++) { 
    if(isset($custom_fields["rw_setlist_$i"])){
        echo "<li>"; 
        echo $custom_fields["rw_setlist_$i"];
    echo "</li>"; 
    }
}

SO网友:Milo

我相信get_post_meta() (或者更准确地说get_metadata() 函数)在一个查询中检索一篇文章的所有元数据,然后将其缓存以供后续调用。至于代码的冗长性,如果它们不需要显式排序,您可以将它们全部保存在一个键下,并将它们作为数组获取。

结束

相关推荐

Blog Posts not showing title

我将阅读设置设置为静态页面,博客设置为一个名为“新内容”的页面。当我转到“最新信息”页面时,我可以看到帖子内容,但没有显示带有帖子页面链接的帖子标题。我只能看到帖子的内容。我已经尽了我所能找到错误,运气不好,请帮忙!索引代码。php:<div id=\"content\" class=\"narrowcolumn\" role=\"main\"> <?php if (have_posts()) : ?> <?php while (hav