使用复选框时检索元密钥

时间:2012-01-25 作者:andresmijares

我创建了一个值为“home”的元框,类型为checkbox,但是我很难在循环中检索,我在循环中使用以下代码:

 <?php if(get_post_meta(get_the_ID(), \'home\') == \'1\' ) : ?> 
 <!--BLABLA TO DISPLAY -->
 <?php endif; ?>
如果复选框被选中,它应该像这样工作,但是不是。。。最有趣的是,如果我将其设置为“0”,它将显示未选中的所有其他页面。

猜猜看?

提前感谢

UPDATE

页面选项代码

 $meta_boxes[] = array(
\'id\' => \'page-options\',
\'title\' => __(\'Page Layout\', \'andrewslab\'),
\'pages\' => array(\'page\'),
\'context\' => \'normal\',
\'priority\' => \'high\',
 \'fields\' => array(


 array(
        \'name\' => __(\'Home\', \'andrewslab\'),
        \'id\' => \'home\',
        \'type\' => \'checkbox\',
        \'desc\' => \'Display in <strong>home page</strong>\',
        \'std\' => \'\'
        )
      )
 );
模板代码

 <?php
     global $wp_query;
     $args = array_merge( $wp_query->query, array( \'post_type\' => \'page\' , \'showposts\' => \'4\' ) );
     query_posts( $args );

 ?>
 <?php while (have_posts()) : the_post() ; $meta = get_post_meta( get_the_ID(), \'home\', true ); ?>
     <?php if( checked( $meta, 1, false ) ) : ?>
       <!--BLABLA-->

     <?php endif ?>     

 <?php endwhile; ?>
 <?php wp_reset_query() ?>
基本上,只有选中复选框时,我才需要进入循环。

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

经过一些研究,我终于解决了。。。看起来它将值理解为“开”和“关”。。。通过这种验证,它就像魅力一样

 <?php if(get_post_meta(get_the_ID(), \'home\', true) == \'on\') : ?>

<?php the_title() ?>

 <?php endif; ?>

SO网友:mor7ifer

您需要将第三个参数添加到get_post_meta(), 所以get_post_meta( get_the_ID(), \'home\', true ) 至少应该让你更靠近些。只是一张便条,以后试着var_dump()print_r() 在以意外方式求值的条件下的变量上,如果在此处执行此操作,您将看到它输出的是一个数组,而不是预期的int/string:)

SO网友:Chip Bennett

对于表单数据,复选框有点奇怪。他们只会在$_POST 数据(如果已设置)。用于保存自定义post元数据的数据验证回调应使用isset() 条件作为复选框验证的一部分,然后相应地设置值。

还有,当你打电话的时候get_post_meta(), 结果是一个数组,因此需要查看该数组的第一个值。我通常会这样使用:

$custom = get_post_meta(get_the_ID(), \'home\');
$custom_home = ( isset( $custom[0] ? $custom[0] : false );

SO网友:Jared

Wordpress有一种方便的方法来实现这一点。实际上有一个checked (请确保read the documentation) 内置可供使用的功能。因此,以您为例:

$meta = get_post_meta( get_the_ID(), \'home\', true );
if( checked( $meta, 1, false ) ) {
    // do stuff
}
正如@m0r7if3r所说,您需要添加true 作为第三个参数get_post_meta.

未经测试,但应能正常工作。

结束