更新帖子元数据复选框

时间:2018-06-03 作者:user8742566

  <div class="vp-field vp-checkbox vp-checked-field vp-meta-single" data-vp-type="vp-checkbox" id="_custom_meta[category][]">
<div class="label">
     <label>Categories</label>
</div>
<div class="field">
    <div class="input">
       <label>
          <input class="vp-input" type="checkbox" name="_custom_meta[category][]" value="star">
         <span></span>star</label>
      <label>
       <input class="vp-input" type="checkbox" name="_custom_meta[category][]" value="triangle">
       <span></span>triangle</label>
     <label>
      <input class="vp-input" type="checkbox" name="_custom_meta[category][]" value="square">
      <span></span>square
     </label>
    </div>
</div>
</div>\'
我正在尝试更新post meta复选框,但下面的选项不起作用。任何关于我做错了什么的建议。

 $features[0] = "star";
 $features[1] = "triangle";
 $features[2] = "square";

update_post_meta($post_id, "category",$features); 

3 个回复
SO网友:Bjorn

好的,所以可能元数据保存正确,现在我们要检索它。

我不知道您在哪里以及如何添加此代码,它看起来像一个元数据库?

复选框并没有神奇地被选中,您需要添加一些逻辑。

首先,我们需要仔细了解如何保存复选框数据。我们希望将选中的复选框保存到DB。

此阵列:

$features = array();
$features[0] = "star";
$features[1] = "triangle";
$features[2] = "square";
不会告诉我们检查了哪些类别。

我们希望按如下方式保存阵列:

$features = array();
$features[\'star\'] = 1; // checked
$features[\'square\'] = 0; // not checked
$features[\'triangle\'] = 1; // checked
在复选框HTML上方,您需要从DB获取功能数据(post\\u meta)。

将此添加到html上方:

<?php
global $post;
$features = get_post_meta( $post->ID, \'category\', true );
?>
如果要选中复选框,则需要添加属性checked="checked" 对它。只有当DB的features数组告诉我们这样做时,我们才想这样做。您可以通过以下复选框html来实现这一点:

<input type="checkbox" name="checkbox_name" id="checkbox_id" value="triangle" <?php echo (isset($features[\'triangle\']) && $features[\'triangle\']) ? \'checked="checked"\' : \'\' ?> />
这是:

<?php echo (isset($features[\'triangle\']) && $features[\'triangle\']) ? \'checked="checked"\' : \'\' ?>
检查数组键(三角形)是否存在于$features 数组,如果该值设置为1(或任何正值)。如果是,则输出checked="checked", 如果没有,它什么也不做。

你好,比约恩

SO网友:Bjorn

您的代码:

$features[0] = "star";
$features[1] = "triangle";
$features[2] = "square";

update_post_meta($post_id, \'category\', $features); 
很好,只有当$post_id 找不到。我假设您想要保存自定义类别,而不是真正的WP分类法。

您是否激活了调试日志?它告诉你什么了吗?

<小时>

Activate debug log.

  1. Download and activate a log viewer.

    define(“WP\\u DEBUG”,false);

进入

define( "WP_DEBUG", true );// just toggle this line to false to turn off
if ( WP_DEBUG ) {
    define( "WP_DEBUG_DISPLAY", false );
    define( "WP_DEBUG_LOG", true );
    @ini_set( "display_errors", 0 );
    define( "SCRIPT_DEBUG", true );
}
现在可以查看错误日志。完成后禁用日志记录!

<小时>Working with the debug log
如果(例如)要检查$post_id 您可以在update_post_meta():

error_log(\'The post id is: \'.$post_id);
要检查我经常使用的阵列,请执行以下操作:

error_log(\'The features array is: <pre>\'.print_r($features,true).\'</pre>\');
你好,比约恩

SO网友:Hermann

只需设置最后一个参数($prev) 这个update_post_meta 若为false,则允许您将新值插入到meta_key. 您还可以在更新之前检查该值是否不在数组中。像这样的。

// Get post met first
// false because we want to return all the values 
// saved in the meta key \'category\'
$oldValues = get_post_meta($post_ID, "category", false);
foreach($features as $feature){
// Check if value is there, otherwise add it
  if (in_array($feature, $oldValues)){
    continue;
  } esle {
    update_post_meta($post_ID, "category", $feature, false);
   }
}

结束

相关推荐

NEXT_POSTS_LINK在自定义循环中不起作用

我已经为帖子创建了一个自定义循环,它与引导程序一起工作,在其中,我添加了分页,但它似乎不起作用。它只显示一个空按钮。。。<?php $args = array( \'post_type\' => \'post\', \'posts_per_page\' => 1 ); $my_query = null; $my_query = new WP_Query($args);