Следующая функция обновляет мета пользователя Wordpress одним нажатием кнопки, чтобы добавить в закладки сообщение. Я упростил код и жестко закодировал значения, чтобы точно определить проблему:
function update_user_bookmarks() {
// bookmarked_news can only have one value. Setting the last parameter to true
// returns an empty string when the field has not yet been added to the database
$currentBookmarks = get_user_meta( 1, 'bookmarked_news', true );
if( is_array( $currentBookmarks ) ) {
$currentBookmarks[] = 'secondBookmark';
} else {
$currentBookmarks = [];
$currentBookmarks[] = 'firstBookmark';
}
update_user_meta( 1, 'bookmarked_news', $currentBookmarks );
}
Предположим, я начинаю с мета bookmarked_news
в базе данных: в этом случае get_user_meta
возвращает пустую строку. Итак, когда я впервые нажимаю кнопку закладки, $currentBookmarks
соответствует пустой строке, и я ожидаю, что функция будет go в блоке else
(потому что это не массив), установите $currentBookmarks
в пустой массив и pu sh firstBookmark
в него. Наконец, updateBookmarks
должен добавить мета bookmarked_news
в базу данных со значением ['firstBookmark']
. Вот как это должно go.
Что происходит, однако, это то, что при первом щелчке update_user_meta
добавляет bookmarked_news
к базе данных со значением ['firstBookmark','secondBookmark']
. Это как если бы функция запускалась дважды, однако я не вызываю ее дважды, и доказательством этого является то, что если я использую $currentBookmarks = '';
вверху вместо использования get_user_meta
, функция работает правильно и сохраняется только ['firstBookmark']
в базу данных по первому клику.