2013-05-02 7 views
1

Я использую пользовательские поля в wordpress для хранения метазначений. некоторые пользовательские поля имеют несколько значений. Я получаю массив с «get post meta», который возвращает массив, как и ожидалось. но кажется, что разные предметы упорядочены без какой-либо логики. некоторые появлялись в том порядке, в котором они были введены, другие в противоположном порядке, какой-то полный хаос ... что я могу пропустить?Post meta values ​​order in WordPress

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

ответ

0

Это может быть или не быть возможно. Wordpress немного похож на машины с бесплатной энергией - он нарушает несколько полезных концепций.

Все ваши метаданные хранятся в таблице postmeta. В этой таблице есть несколько полей: мета-идентификатор, идентификатор сообщения, мета-ключ, значение. Каждый раз, когда вы добавляете мета, вы добавляете строку в эту таблицу. Однако каждый раз, когда вы обновляете мета, вы не меняете порядок строк.

get_post_meta обычно возвращает строки в одном порядке, поэтому я предполагаю, что вы что-то делаете. Можем ли мы увидеть код? Если он всегда находится в восходящем или нисходящем, но никогда не как случайный микс, вы теряете где-то sort().

+0

на самом деле нет большого количества кода для show .. Я использую пользовательский полевой набор для ввода данных в цикле, и я возвращаю его с помощью get_post_meta, и я действительно думал, что он будет создан e массив, который позволяет извлекать данные в том же порядке. в соответствии с тем, что вы говорите, что это будет эффективно autosave, который решает? он все равно не объяснил бы, почему формы отображаются отлично упорядоченными в backend. Я не использую sort() нигде. – aushilfe444

+0

@ aushilfe444: Я не могу сказать, не имея доступа к коду. Все, что я могу сказать, это то, что в нормальных условиях 'get_post_meta' возвращает вещи в порядок. Вы, случайно, передаете материал через JSON или какой-либо другой процесс косвенного преобразования? –

0

Я совсем недавно была такая же проблема, вот что я нашел:

При использовании get_post_meta(), WordPress проверяет, имеет alreadby были загружены метаданные для данного объекта (должность); если он есть, то он находится в кеше объекта (volatile, apc, memcached и т. д.) и загружает его оттуда.

Если мета-данные, которые он не в кэше объектов, то он загружает все мета-данные для этого объекта через update_meta_cache(), который запрашивает базу данных без ORDER BY

Если ваш двигатель хранения это MyISAM, результаты будут возвращаются в случайном порядке каждый раз, когда вы обновляете метаданные, но при использовании InnoDB порядок, в котором результаты возвращаются, кажется последовательным (по крайней мере, на моих тестах)