我自己的Metabox复选框插件只保存我选中的最后一个值

时间:2017-02-14 作者:Tiyome

我正在用复选框构建自己的元数据库。我想将选中的复选框的值保存为类别(ID)。

我构建了一个数组来附加复选框的值,但它只保存我选中的最后一个复选框。

我试图使用以下函数保存这些值。

wp\\u set\\u post\\u categories();wp\\u set\\u object\\u terms();

此外,当我单击“创建/编辑帖子”的“提交”按钮时,无论我使用什么函数,它都会保存复选框的最后一个值。

这是我的代码:

      add_action( \'admin_menu\', \'my_enhanced_categories_remove_meta_box\');
function my_enhanced_categories_remove_meta_box(){
   remove_meta_box(\'categorydiv\', \'post\', \'normal\');
}

//Add new taxonomy meta box
 add_action( \'add_meta_boxes\', \'my_enhanced_categories_add_meta_box\');
 function my_enhanced_categories_add_meta_box() {
     add_meta_box( \'category-all\', \'Custom Portfolio Categories\',\'my_enhanced_categories_category_metabox\',\'post\' ,\'side\',\'high\');
 }


$postterms = get_the_terms( $post->ID,$taxonomy );

  function my_enhanced_categories_category_metabox( $post ) {

      //Set up the taxonomy object and get terms
$taxonomy = \'category\';
$tax = get_taxonomy($taxonomy);//This is the taxonomy object

//The name of the form
$name = \'tax_input[\' . $taxonomy . \']\';

//Get all the terms for this taxonomy
$terms = get_terms($taxonomy,array(\'hide_empty\' => 0));
     echo \'<div id="\' . $taxonomy . \'-all" class="tabs-panel">\';
     echo \'<ul id="\' . $taxonomy . \'-checklist" class="list-\' . $taxonomy . \'categorychecklist form-no-clear">\';

     $categories = array();

     foreach($terms as $term){
            $id = $taxonomy.\'-\'.$term->term_id;

             echo "<li id=\'$id\'><label>";

            echo "<input type=\'checkbox\' id=\'in-$id\' name=\'{$name}-$term->term_id\' value=\'$term->term_id\' />$term->name<br />";

            echo "</label></li>";

$key_tax = ($_POST[\'tax_input\']);

if (!empty($key_tax)) {

array_push($categories, array_values($key_tax));




    /*wp_set_post_categories( $_POST[\'post_ID\'], array_values($key_tax)[0]); */

}

        }?>

        </ul>
        </div>
        <?php



    }

//    var_dump($categories);
  //          wp_set_post_terms( $_POST[\'post_ID\'], $categories, \'category\' );

wp_set_object_terms( $_POST[\'post_ID\'], $categories, \'category\');
var_dump($categories);

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

这很容易实现,首先重命名name 把某事归因于某人my_categories[] 然后将其作为数组传递

然后需要设置values 每个复选框的category id. 通过这种方式,可以循环遍历数组my_categories[] 然后设置该数组中存在的类别。

Here is a simplified example :

// In your callback function for metabox,
// This should be inside a loop.
<input type="checkbox" name="my_categories[]" value="$term->term_id">


<?php 
// This should be hooked to the save_post action of appropriate post type.
if(!empty($_POST[\'my_categories\'])) { 
    foreach($_POST[\'my_categories\'] as $cat) 
        { 
            echo $cat; 
            //echoes the value set in the HTML form for each checked checkbox.
            //In your case the ids of selected checkboxes, now all you need to do is set those categories.
        } 
    } 
 ?>
现在,您在一个数组中拥有了所选类别的所有ID,这更容易处理。使用您的逻辑设置类别。

相关推荐

Starting with tabbed metabox

我的插件需要一个带选项卡的metabox。实际上,它们是5个代谢箱,每个都在一个选项卡中。我找到了以下脚本:https://speckyboy.com/10-simple-code-snippets-creating-beautiful-tabs/哪一个最适合在元框中使用?最好只有CSS?JS必须注册?我想开始测试这些脚本,但想知道从哪里开始。非常感谢。