Неожиданные результаты при использовании Wordpress '' get_ 'и' update_user_meta 'вместе взятых - PullRequest
0 голосов
/ 03 апреля 2020

Следующая функция обновляет мета пользователя 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'] в базу данных по первому клику.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...