如何将多选菜单中的每个选项保存为它自己的meta_key+meta_Value对?

时间:2013-07-23 作者:Andrew

如何将多选菜单中的每个选项保存为自己的meta\\u键+meta\\u值对?

这是基本的多选菜单。注意:多个选择菜单允许您选择多个选项。

<select name="products[]" multiple>
    <option value="1">Product One</option>
    <option value="2">Product Two</option>
    <option value="3">Product Three</option>
    .... etc
</select>
中的代码位save_post 我需要帮助的功能。

if ( isset( $_POST[ \'products\' ] ) ) {
    foreach ( $_POST[ \'products\' ] as $product ) {
        // this would just keep adding the products as separate meta keys, which is what I want, but I need to modify it so it deletes them when they are unselected.
        add_post_meta( $post_id, \'products\', $product, false );
    }   
}
我希望每个选项都是自己的元键和值对,而不是序列化数组。如果更新了多选菜单,我希望不再从Posteta表中选择旧值delete_post_meta.

例如,wp\\U Posteta表如下所示:

post_id     meta_key             meta_value
45          products             2
63          products             3
12          products             1

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

在里面试试这个save_post 但请注意代码是not 已测试

$old = get_post_meta($post_id, \'products\');
$new = isset ( $_POST[\'products\'] )  ? $_POST[\'products\'] : array();
if ( empty ($new) ) {
   // no products selected: completely delete alla meta values for the post
   delete_post_meta($post_id, \'products\');
} else {
  $already = array();
  if ( ! empty($old) ) {
    foreach ($old as $value) {
      if ( ! in_array($value, $new) ) {
        // this value was selected, but now it isn\'t so delete it
        delete_post_meta($post_id, \'products\', $value);
      } else {
        // this value already saved, we can skip it from saving
        $already[] = $value;
      }
    }
  }
  // we don\'t save what already saved
  $to_save = array_diff($new, $already);
  if ( ! empty($to_save) ) {
    foreach ( $to_save as $product ) {
       add_post_meta( $post_id, \'products\', $product);
    }
  }
}

结束

相关推荐

列出分类法:如果分类法没有POST,就不要列出分类法--取决于定制的POST-META?

这可能很难解释,我不知道是否有解决办法!?我有一个名为“wr\\u event”的自定义帖子类型和一个名为“event\\u type”的分层自定义分类法。自定义帖子类型有一个元框,用于event_date 并且与此帖子类型关联的所有帖子都按以下方式排序event_date. 我在循环中有一个特殊的条件来查询event_date 已经发生了-在这种情况下,它没有显示,但只列在我的档案中。就像你可以使用wp_list_categories() 我编写了一个自定义函数,它以完全相同的方式列出所有分类术语。现在