php - unset 给出 array_search() 期望参数 2 是数组,给定字符串
问题描述
我有一个ID
fromGET
并检查它ID
是否在 a 中custom field
,如果是,则放置一个删除按钮,否则显示一个add button
custom field
每次我们发送值时都会得到一个,string
但为了删除它,我unset
在数组中使用它,同时检查它current ID
是否存在。
我在混音implode
和混音时变得非常困惑explode
整个代码:
$postId = $_GET['postId'];
$allposts = '';
$user_id = get_current_user_id();
$userPosts = get_user_meta( $user_id, 'save_post', TRUE );
$userPosts = explode(',', $userPosts);
$response = wp_remote_get('https://example.com/wp-json/wp/v2/posts?include='.$postId);
if ( is_wp_error( $response ) ) {
return;
}
$posts = json_decode( wp_remote_retrieve_body( $response ) );
if ( empty( $posts ) ) {
return;
}
if ($_SERVER['REQUEST_METHOD'] == "POST") {
if (isset($_POST['save_post'])) {
array_push($userPosts, $postId);
$userPosts = array_values(array_unique($userPosts));
$userPosts = implode(',', $userPosts);
$userPosts = trim($userPosts);
$userPosts = ltrim($userPosts, ",");
update_user_meta( $user_id, 'save_post', $userPosts );
}
if (isset($_POST['remove_post'])) {
if (($key = array_search($postId, $userPosts)) !== false) {
unset($userPosts[$key]);
}
$userPosts = implode(',', $userPosts);
$userPosts = trim($userPosts);
$userPosts = ltrim($userPosts, ",");
update_user_meta( $user_id, 'save_post', $userPosts );
}
}
if ( ! empty( $posts ) ) {
// For each post.
foreach ( $posts as $post ) {
$allposts .= '<a href="' . esc_url( $post->link ) . '" target=\"_blank\">' . esc_html( $post->title->rendered ) . '</a> ' . esc_html( $fordate ) . '<br />'.$post->content->rendered;
?>
<div class="container margin-top-80 margin-bottom-80">
<div class="row">
<div class="col-8">
<form id="savedPosts" action="" method="POST" class="" autocomplete="off">
<input type="hidden" name="save_post" value="<?php echo $postId; ?>">
<?php
$userPosts = implode(',', $userPosts);
if (strpos($userPosts, $postId) !== false) { ?>
<button disabled="disabled" type="submit" class="save_post disabled btn btn-outline-dark" data-toggle="tooltip" data-placement="top" title="già nei tuoi favoriti">Già nella box</button>
<button id="remove_post" name="remove_post" type="submit" class="save_post" data-toggle="tooltip" data-placement="top" title="aggiungilo alla tua box">Rimuovi dalla box</button>
<?php } else {
?>
<button id="save_post" name="save_post" type="submit" class="save_post" data-toggle="tooltip" data-placement="top" title="aggiungilo alla tua box">Salva nella box</button>
<?php }
?>
</form>
</div>
</div>
</div>
<?php }
}
?>
解决方案
get_user_meta 返回一个数组,因此不需要分解响应,但如果响应为空,它将被视为字符串。
在这里你应该改变这一行:
$userPosts = !empty(get_user_meta( $user_id, 'save_post', TRUE )) ?get_user_meta($user_id, 'save_post', TRUE): [];
推荐阅读
- javascript - 使用顶级 React Children API 映射孩子
- laravel - Laravel 8 - 一次调用多个工厂状态
- java - JavaFX CSS 中的 -fx-text-fill 和 -fx-text-inner-color 有什么区别?
- azure - 术语“Get-AzADServicePrincipal”未被识别为 cmdlet、函数的名称
- javascript - 使用 Perfume.js 跟踪异步性能
- react-redux - 在“DefaultRootState”类型上不存在。TS2339
- node.js - 在 Vue 中使用 Nipplejs 和 Quasar
- sql - 查询生成器原始子查询不起作用
- python - Python:返回 None 而不是 False
- azure - 将数据从一个订阅中的 Azure 数据湖迁移到另一个订阅