如何对帖子/页面元框进行复选

时间:2010-11-30 作者:Denis Belousov

请帮助我了解如何为metabox创建Multicheck类型。搜索所有internet内容,无任何内容。谢谢

1月更新此功能使我头痛。我不知道怎么了。我尝试了你的方法,但什么都没有,然后我尝试了get\\u posts,但用这种方法我有太多的麻烦。使用您的方法,我在内容之前收到以下错误:

Warning: urldecode() expects parameter 1 to be string, array given in Z:\\home\\mysite.net\\www\\wp-includes\\query.php on line 1878
这是我的代码:

<?php
        $catids = get_post_meta($post->ID,\'_mtb_multicheck\',false);
        $limit = 10;
        query_posts( array(\'posts_per_page\' => $limit, \'cat\' => $catids, \'paged\' => get_query_var(\'paged\') ) );
    ?>
<?php if (have_posts()) : ?>
<?php while (have_posts()) : the_post(); ?>

        <!-- Content-->

<?php endwhile; ?>  
            <?php pagination(); ?>
<?php else : ?>
            <!--Error message here-->

<?php endif; ?>
我想知道我的梵蒂冈会回报什么。进行以下操作:

query_posts( array(\'posts_per_page\' => $limit, \'cat\' => print_r($catids), \'paged\' => get_query_var(\'paged\') ) );
在我的页面上获取以下内容:

Array ( [0] => 5 [1] => 5 [2] => 3 )
我想这是我的query\\u帖子打印出来的,不是$CATID。这是个大麻烦。我觉得自己像个书呆子。请帮帮我。

1 个回复
最合适的回答,由SO网友:Jan Fabry 整理而成

post元数据可以将多个值存储为postmeta 表,或作为值为序列化PHP数组的一个条目。序列化可能需要更少的代码,但不同的条目允许以后更快的查询(“给我所有至少选中了multicheck选项A的帖子”)。

我拿走了the code you linked to 并进行了以下更改以允许“多重检查”:

// in show():
// Line 254: replace it by:
$meta = get_post_meta($post->ID, $field[\'id\'], \'multicheck\' != $field[\'type\'] /* If multicheck this can be multiple values */);
// Add the following to the switch:
case \'multicheck\':
    foreach ( $field[\'options\'] as $value => $name ) {
        // Append `[]` to the name to get multiple values
        // Use in_array() to check whether the current option should be checked
        echo \'<input type="checkbox" name="\', $field[\'id\'], \'[]" id="\', $field[\'id\'], \'" value="\', $value, \'"\', in_array( $value, $meta ) ? \' checked="checked"\' : \'\', \' /> \', $name, \'<br/>\';
    }
    break;

// In save():
// Line 358: replace it by:
$old = get_post_meta($post_id, $name, \'multicheck\' != $field[\'type\'] /* If multicheck this can be multiple values */);
// Lines 409-413: Wrap them in an else-clause, and prepend them by:
if ( \'multicheck\' == $field[\'type\'] ) {
    // Do the saving in two steps: first get everything we don\'t have yet
    // Then get everything we should not have anymore
    if ( empty( $new ) ) {
        $new = array();
    }
    $aNewToAdd = array_diff( $new, $old );
    $aOldToDelete = array_diff( $old, $new );
    foreach ( $aNewToAdd as $newToAdd ) {
        add_post_meta( $post_id, $name, $newToAdd, false );
    }
    foreach ( $aOldToDelete as $oldToDelete ) {
        delete_post_meta( $post_id, $name, $oldToDelete );
    }
} else {
    // The original lines 409-413
}
两个额外的更改可防止在以下情况下出现PHP警告:WP_DEBUG 已启用:

// Line 337:
if ( ! isset( $_POST[\'wp_meta_box_nonce\'] ) || !wp_verify_nonce($_POST[\'wp_meta_box_nonce\'], basename(__FILE__))) {
// Line 359:
$new = isset( $_POST[$field[\'id\']] ) ? $_POST[$field[\'id\']] : null;
通过这些更改,您可以通过如下定义来使用“multicheck”:

array(
    \'name\' => \'Multicheck\',
    \'id\' => $prefix . \'multicheck\',
    \'type\' => \'multicheck\',
    \'options\' => array(
        \'a\' => \'Apple\',
        \'b\' => \'Banana\',
        \'c\' => \'Cherry\',
    ),
)

结束

相关推荐

使用自定义类别Metabox在管理中未保存的页面类别?

我对此不知所措。您是否看到以下特定于noindex、nofollow复选框的代码有任何错误?元框可以很好地绘制到屏幕上,但值不会粘住。自定义页面标题和自定义摘录的代码工作正常。// =================== // = POST OPTION BOX = // =================== add_action(\'admin_menu\', \'my_post_options_box\'); function my_post_op