列出自定义字段为空的文本

时间:2015-06-06 作者:Emre Aydın

我使用下面的代码将复选框添加为自定义字段。

通过复选框选择的文本将被视为“特殊文本”,其他文本将保留为“普通文本”。

<?php
add_action("admin_init", "checkbox_init");

function checkbox_init(){
add_meta_box("checkbox", "Checkbox", "checkbox", "post", "side", "high");
}

function checkbox(){
global $post;
$custom = get_post_custom($post->ID);
$field_id = $custom["field_id"][0];

echo \'<label>Check for yes</label>\';
$field_id_value = get_post_meta($post->ID, \'field_id\', true);
if($field_id_value == "yes") {
    $field_id_checked = \'checked="checked"\';
}
echo \' <input type="checkbox" name="field_id" value="yes" \'.$field_id_checked.\' />\';
}

// Save Meta Details
add_action(\'save_post\', \'save_details\');

function save_details(){
  global $post;

  if (defined(\'DOING_AUTOSAVE\') && DOING_AUTOSAVE) {
     return $post->ID;
  }

update_post_meta($post->ID, "field_id", $_POST["field_id"]);


}

?>
对于添加类别的字段中的列表,我使用以下代码:

<?php
if( is_category($categories->cat_ID) ) {
  if(!$wp_query) {
    global $wp_query;
  }
  $args = array(
    \'meta_key\' => \'field_id\',
    \'meta_value\' => \'yes\',
  );
  query_posts( array_merge( $args , $wp_query->query ) );
}
if (have_posts()) : while (have_posts()) : the_post(); ?>


/***/ - posts -  /***/



<?php endwhile; else: ?>
<?php endif; ?>
因此,通过复选框选择的文本被指定为“是”,我可以列出它们。但我无法列出未选中的文本。我认为他们在默认情况下是不存在的。我尝试了“meta\\u value”=>“”,或“compare”=>“NOT EXISTS”,但不起作用。

我不擅长Wordpress,而且我的英语也不是很好。你能简单地解释一下吗?非常感谢。

category

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

不要将字段设置为null或完全取消设置。获取该数据所需的查询效率不高。将字段设置为“否”或其他值。

function save_details(){ 
  global $post; 
  if (defined(\'DOING_AUTOSAVE\') && DOING_AUTOSAVE) { 
    return $post->ID; 
  }

  $valid = array(
    \'yes\' => \'yes\',
    \'no\' => \'no\'
  );
  if ( isset ( $_POST["field_id"] ) && isset($valid[$_POST["field_id"]]) { 
    update_post_meta($post->ID, \'field_id\', $valid[$_POST["field_id"]]); 
  } else {
    update_post_meta($post->ID, \'field_id\', \'no\');
  }
}
Please sanitize that POST data! 在上面的代码中,我使用了“白名单”技术。用户输入从未实际命中数据库。

然后,您可以像查询“是”es一样查询“否”。

如果您不想接受我的建议,那么获取未设置/空值的查询是:

$args = array(
  \'ignore_sticky_posts\' => true,
  \'meta_query\' => array(
    array(
      \'key\' => \'field_id\',
      \'compare\' => \'NOT EXISTS\',
    )
  )
);
$q = new WP_Query($args);
var_dump($q->request); // debug
var_dump(wp_list_pluck($q->posts,\'post_title\')); //debug
请,请,请不要使用query_posts(). Even the Codex says not to.

结束

相关推荐

Parent and child categories

下面是a的一部分WP_Query 环我有两个父类别ABC和12,每个都有几个子类别。在第一个td 我想让ABC儿童频道的slug类和12个儿童频道的slug类。该职位可能属于两个子类别之一,或同时属于两个子类别。一个来自ABC,一个来自12,或者一个来自ABC,一个来自12。$inCat = get_the_category(get_the_ID()); echo \"<td>\".(!empty($inCat[0]->slug) ? $inCat[0]->slu