如果选中Meta复选框,请执行以下操作?

时间:2013-06-22 作者:Jacob

我创建了一个自定义复选框,当我选中时,我希望它显示稍微不同的内容(特别是特殊的css样式)。由于某些原因,它不能正常工作。

在我的功能中:

add_action( \'add_meta_boxes\', \'add_special_checkbox\' );
function add_special_checkbox()
{
    add_meta_box( \'special-checkbox\', \'Special Box\', \'special_checkbox_func\', \'post\', \'side\', \'high\' );
}

function special_checkbox_func( $post )
{
    $values = get_post_custom( $post->ID );
    $check = isset( $values[\'special_box_check\'] ) ? esc_attr( $values[\'special_box_check\'][0] ) : \'\';
    wp_nonce_field( \'my_special_box_nonce\', \'special_box_nonce\' );
    ?>
    <p>
        <input type="checkbox" name="special_box_check" id="special_box_check" <?php checked( $check, \'on\' ); ?> />
        <label for="special_box_check">Is this post \'special?\'</label>
    </p>
    <?php   
}


add_action( \'save_post\', \'special_checkbox_save\' );
function special_checkbox_save( $post_id )
{
    // Bail if we\'re doing an auto save
    if( defined( \'DOING_AUTOSAVE\' ) && DOING_AUTOSAVE ) return;

    // if our nonce isn\'t there, or we can\'t verify it, bail
    if( !isset( $_POST[\'special_box_nonce\'] ) || !wp_verify_nonce( $_POST[\'special_box_nonce\'], \'my_special_box_nonce\' ) ) return;

    // if our current user can\'t edit this post, bail
    if( !current_user_can( \'edit_post\' ) ) return;

    // now we can actually save the data
    $allowed = array( 
        \'a\' => array( // on allow a tags
            \'href\' => array() // and those anchords can only have href attribute
        )
    );

    // This is purely my personal preference for saving checkboxes
    $chk = ( isset( $_POST[\'special_box_check\'] ) && $_POST[\'special_box_check\'] ) ? \'on\' : \'off\';
    update_post_meta( $post_id, \'special_box_check\', $chk );
}
?>
在我的循环中:

<?php if (get_post_meta($post->ID, \'special_box_check\', true)) { ?>
//add special styling
<? } else { ?>
//dont add special styling
<?php } ?>
当我保存一些帖子时,尽管我没有选中它们的复选框,但它们有特殊的样式。当我取消选中一个框时,我希望特殊的样式消失,但不是在取消选中该框时。

我肯定我在这里做错了什么。提前谢谢。

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

您正在设置一个值,无论是否使用此行进行检查:

$chk = ( isset( $_POST[\'special_box_check\'] ) && $_POST[\'special_box_check\'] ) ? \'on\' : \'off\';
该值将为onoff, 所以你的if 条件总是真的,因为它总是有一个值。

您可以将其更改为仅在选中时保存,或在未选中时删除。这样,您的条件将起作用,并且您不会为了保存关闭状态而有额外的元条目。

if ( isset( $_POST[\'special_box_check\'] ) && $_POST[\'special_box_check\'] ) {
    add_post_meta( $post_id, \'special_box_check\', \'on\', true );
} else {
    delete_post_meta( $post_id, \'special_box_check\' );
}

SO网友:S kumar

代码很好,没有什么可以删除的,只是需要有一个条件

// check against the custom field has a value
if ( get_post_meta($post->ID, \'special_box_check\', true) == \'on\' ) ) {
   $class = \'highlight\';
} else{
   $class = \'normal\';
}
放置$class div包装器中的变量。您的样式如下所示:

.highlight{ color:#FF0000; }
.normal{ color:#000; }

结束

相关推荐

为什么PHPUnit无法测试我的WordPress网站

我已经研究这个问题好几天了,虽然很多人问这个问题,但我从来没有找到一个清晰简洁的答案。我正在跑步:PHP单元:3.7.21版;WordPress:3.5.1版;操作系统:Ubuntu 11.10;MySQL:5.1.69-0ubuntu0版。11.10.1 PHP:版本5.3.6-13ubuntu3。长话短说,我已经将基本的wordPress核心下载到我电脑上的一个目录中。我已经成功下载并安装了pear和phpunit。我通过在简单的php文件上编写基本测试来测试phpunit,这些文件运行良好。我的问题