AlexanderShapoval
@AlexanderShapoval
PHP maker

Функция update_post_meta(), проблема с n-мерностями массива, как получить, обработать и вернуть двумерный массив?

Не очень люблю плагины, по этому делаю своё решение без плагина
// Пользователи которым понравился пост
// Тут я получаю массив ID пользователей которые нажали "мне нравится"
$post_users = get_post_meta( $post_id, 'likes_post' );
// Далее я проверяю есть ли ID пользователя в списке "лайкнувших"
// Если нет в списке - я делаю следующее:
// Кладу ID пользователя в конец массива
array_push( $post_users, $user_id );
// Обновляю список "лайкнувших" пользователей
update_post_meta( $post_id, 'likes_post', $post_users );


Всё работает хорошо, только вот результат возвращается вот такой:
a:1:{i:0;i:1;}

array (
  0 => 1,
)

Если нажать еще раз "мне нравится", возвращается вот такой:
a:2:{i:0;a:1:{i:0;i:1;}i:1;i:1;}

array (
  0 => 
  array (
    0 => 1,
  ),
  1 => 1,
)


Во первых оно не должно больше "лайкаться", а во вторых первое значение уходит на другую мерность.

Подскажите, как избавиться от перехода в другую мерность?

Вот полный код:
$post_id = $_REQUEST['post_id'];
$user_id = get_current_user_id();

// Пользователи которым понравился пост
$post_users = get_post_meta( $post_id, 'likes_post' );

// Посты которые понравились пользователю
$user_posts = get_post_meta( $user_id, 'likes_user' );

if ( in_array( $post_id, $user_posts ) || in_array( $user_id, $post_users ) ) {
	// Удаляем лайк
} else {
	// Добавляем лайк
	array_push( $post_users, $user_id );
	array_push( $user_posts, $post_id );

	update_post_meta( $post_id, 'likes_post', $post_users );
	update_post_meta( $user_id, 'likes_user', $user_posts );
}
  • Вопрос задан
  • 212 просмотров
Пригласить эксперта
Ответы на вопрос 1
trampick
@trampick
Веб-разработчик
Во - первых я бы советовал использовать функцию serialize(unserialize для обратного действия) - преобразует массив в строку. Во вторых я бы посмотрел бы таки структуру таблицы post_meta. У поля значения( value) там имеется определенный объем данных, которые можно впихнуть туда. Если впихнуть больше, то работать не будет. Т.е. Ваш алгоритм текущий перестанет работать на определенном количестве данных.

Не работает Ваш скрипт скорее всего потому что вы пытаетесь запихать массив в post_meta, где должна быть строка(опять же serialize в помощь).

Я бы завел на вашем месте свою таблицу из трех полей id - идентификатор записи бд(первичный ключ), id_post() идентификатор записи wordpress, id_user идентификатор пользователя и хранил бы там лайки.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы