Intereting Posts
Многостраничный сайт WordPress, разрабатывающий локальные и синхронизирующие изменения в реальном времени Добавить дополнительный класс для get_avatar при показе изображения Как я могу переключить календарный календарь в поле ввода месяца? Как изменить post_where фильтр только для поискового запроса Буквы на главной странице Не удается заставить JQuery работать с wordpress Попытка получить класс для создания экземпляра ONCE (или «почему я продолжаю пробивать себе голову?») Страницы входа в WP переадресовываются на главную страницу (не могут войти в систему) Приоритет add_action и таксономия, используемые в плагине Запрос пользовательского типа почтового типа по дате работает только тогда, когда два сообщения соответствуют запросу Как я могу настроить изображение миниатюр, не создавая изображение? Динамическое изменение функционального образа в настройке Shortcode не обрабатывается при добавлении в поле параметра с помощью wp_editor Пользователь не может войти jQuery Image Annotation

Как преобразовать пользовательские поля из текста в массив?

Я хочу преобразовать свои старые данные сообщения, содержащие пользовательские поля, которые хранятся в текстовом формате, например: name , url $ name, url $ name, url и т. Д.

Я хочу преобразовать эти данные и сохранить новые данные в виде массива в новом настраиваемом поле.
Кто-нибудь знает, как это можно сделать?

Я хочу сохранить эти данные, чтобы я мог использовать данные с этим Gist: Повторяющиеся пользовательские поля в Metabox (Автор: Helen Hou-Sandi)

По сути, вам нужно создать метод обновления для своих сообщений.

Основы

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

 if ( get_post_meta( $post_ID, 'updated', true ) != 1 ) : $old_data = get_post_custom( $post_ID ); $new_data = array( 'name' => $old_data[ 'name' ], 'url' => $old_data[ 'url' ] ); 

Затем сохраните эти данные в метатете post – она ​​будет сериализована.

 update_post_meta( 'custom_data', serialize( $new_data ) ); 

Затем удалите старые поля и установите флаг, чтобы показать, что вы обновили:

 delete_post_meta( $post_ID, 'name' ); delete_post_meta( $post_ID, 'url' ); update_post_meta( $post_ID, 'updated', 1 ); endif; 

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

Обновление: разделение существующей строки

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

 $oldData = "name1, url1 $ name2, url2 $ name3, url3"; $newData = array(); $dataArrays = explode( " $ ", $oldData ); // $dataArrays = ["name1, url1", "name2, url2", "name3, url3"]; foreach( $dataArrays as $dataArray ) { $separated = explode( ", ", $dataArray ); // $separated = ["name1", "url1"]; array_push( $newData, array( 'name' => $separated[0], 'url' => $separated[1] ) ); } /* $newData = array( array( 'name' => 'name1', 'url' => 'url1' ), array( 'name' => 'name2', 'url' => 'url2' ), array( 'name' => 'name3', 'url' => 'url3' ) ); */