我已经在post表中创建了一个自定义元键,现在当我转储它给我的值时,它的值是序列化的
数组([0]=>a:3:{s:10:“产品id”;s:4:“2592”;s:7:“用户id”;i:41;i:0;a:1:{i:0;s:63:“a:3:{s:10:“产品id”;s:4:“2592”;s:7:“用户id”;i:2;i:0;a:0:{};}})
我想从中获取user\\u id和product\\u id。其主要思想是为ID存储在此meta\\u密钥中的特定产品的用户隐藏一个按钮,该产品的ID位于此序列化数组中,以及如何做到这一点的任何想法我已经尝试了以下代码,但什么都没有发生
$next_in_line = get_post_meta(esc_attr($product->get_id()), \'_next_in_line\');
print_r($next_in_line);
$unserilize_data = unserialize($next_in_line);
print_r($unserilize_data[\'0\']);
但是给了我bool(false),当我使用这个函数时
$next_in_line = get_post_meta(esc_attr($product->get_id()), \'_next_in_line\');
print_r($next_in_line);
$un_data = maybe_unserialize($next_in_line);
print_r($un_data[\'0\']);
它以以下格式返回值
a: 3:{s:10:“产品id”;s:4:“2592”;s:7:“用户id”;i:41;i:0;a:1:{i:0;s:63:“a:3:{s:10:“产品id”;s:4:“2592”;s:7:“用户id”;i:2;i:0;a:0:{};};}}
现在我如何才能做出我上面提到的条件,我现在是空白的,请有人帮助我。提前谢谢你
UPDATE
我正在存储这样的数据
function nextInLine(){
$product_id = $_POST[\'product_id\'];
$user_id = get_current_user_id();
$next_customer_meta = get_post_meta($product_id, \'_next_in_line\');
if($next_customer_meta == \'\'){
$meta_array = array(
\'product_id\' => $product_id,
\'user_id\' => $user_id
);
$meta_value = maybe_serialize($meta_array);
} else {
$meta_array = array(
\'product_id\' => $product_id,
\'user_id\' => $user_id
);
array_push($meta_array, $next_customer_meta);
$meta_value = maybe_serialize($meta_array);
}
var_dump($meta_value);
update_post_meta($product_id, \'_next_in_line\', $meta_value);
return true;
}
add_action(\'wp_ajax_nextInLine\', \'nextInLine\');
add_action(\'wp_ajax_nopriv_nextInLine\', \'nextInLine\');
SO网友:Mohsin
我用另一种方式解决了这个问题,改变了我的逻辑。我所做的不是一个合适的解决方法,但它像一个魔咒一样工作。下面是我所做的。
我现在只将user\\u id发送到数据库中,而不进行序列化。
function nextInLine(){
$product_id = $_POST[\'product_id\'];
$user_id = get_current_user_id();
$next_customer_meta = get_post_meta($product_id, \'_next_in_line\');
var_dump($next_customer_meta);
if( empty($next_customer_meta) ){
$meta_value = $user_id;
} else {
$user_id = $next_customer_meta[\'0\'] . \',\' . $user_id;
$meta_value = $user_id;
}
update_post_meta($product_id, \'_next_in_line\', $meta_value);
return true;
}
add_action(\'wp_ajax_nextInLine\', \'nextInLine\');
add_action(\'wp_ajax_nopriv_nextInLine\', \'nextInLine\');
然后在获取和编写条件时,我使用了此代码。
<?php
if(is_user_logged_in()){
$next_in_line = get_post_meta(esc_attr($product->get_id()), \'_next_in_line\', true);
$status_data = explode(\',\', $next_in_line);
if( !in_array(get_current_user_id(), $status_data) ){
?>
<button class="btn btn-sm btn-default" id="next-btn" value="<?php echo $product->get_id(); ?>">
Next
</button>
<span class="text-tiny">
Press this button to get in line for this item
</span>
<?php
} else {
echo "<h4>You are already in line for this item</h4>";
}
} else {
?>
<a href="<?php echo get_site_url() . \'/my-account\'; ?>">Login
</a><span>to get in line for this item.</span>
<?php } ?>
</div>
<?php } ?>
这样做的目的是,如果用户已经点击了按钮,那么就隐藏按钮,因此从这个逻辑来看,我已经实现了我想要实现的目标。
谢谢大家宝贵的时间和努力这对我来说真的很重要