Intereting Posts
WordPress multisite с двумя уровнями поддоменов? Фильтровать категории сообщений WordPress с помощью jquery / ajax и pagination? Есть ли пустая среда темы, совместимая с WP 3.0? Избежать столкновения имени класса при использовании сторонних библиотек в плагинах? Удаление общих параметров с помощью uninstall.php Случайные вхождения 502 Bad Gateway с использованием WordPress и Nginx WordPress Media Library показывает неправильный размер предварительного просмотра? Is_search не работает на странице результатов поиска Где я могу найти реальный архитектурный документ в WordPress? Как определить, зарегистрирован ли администратор вне цикла Как получить сообщения с текущего месяца? Как запустить WP_Query для извлечения вложений в сообщения только из определенной категории? Как найти адрес карты в пользовательском типе сообщений? Создайте новый URL-адрес администратора для настраиваемого типа сообщения Когда вы можете получить текущий идентификатор страницы и инициализировать крючки сразу после?

Как изменить значение _wp_attachment_metadata в SQL?

Мне пришлось изменить размер существующих изображений в папке загрузки (около 1k). После повторной загрузки WordPress, конечно, не распознает новые измерения. Мой подход состоял в том, чтобы просто изменить размер в таблице _post_meta. Но это выглядит так:

a:6{s:5:"width";s:3:"330";s:6:"height";s:4:"1067";s:14:"hwstring_small";s:22:"height='96' width='29'";s:4:"file";s:22:"2012/03/2-IMG_1540.png";s:5:"sizes";a:3:{s:9:"thumbnail";a:3:{s:4:"file";s:21:"2-IMG_1540-56x183.png"; ... 

Все, что мне нужно изменить, – это значение ширины первой записи от «330» до «sth». остальное. Хотя для меня это похоже на словарь, я не нашел способ получить доступ к этому значению в SQL.

Ссылка wp_update_attachment_metadata указывает, что все данные должны быть указаны, поскольку существующие данные будут уничтожены. Именно по этой причине я думал, что это будет проще сделать в SQL.

Solutions Collecting From Web of "Как изменить значение _wp_attachment_metadata в SQL?"

Вы можете сделать это через PHP вместо SQL, просто получите существующие метаданные и измените то, что вам нужно, оно будет обрабатывать сериализацию для вас:

 $newwidth = '250'; // or whatever it is $attachments = get_posts(array('post_type'=>'attachment'); foreach ($attachments as $attachment) { $id = $attachment->ID; $metadata = wp_get_attachment_metadata($id); $metadata['width'] = $newwidth; wp_update_attachment_metadata($id,$metadata); } 

Но на самом деле, вы можете лучше использовать плагин Regenerate Thumbnails, который может исправить это и одновременно изменить различные размеры миниатюр.

То, что вы смотрите, это сериализованные данные PHP, сохраненные как строка в базе данных MySQL. SQL просто не будет знать, что с ним делать.

Самое важное, что нужно помнить о сериализованных данных, – это не тривиально редактировать. Он вставляет длину значений в формат и если изменения не соответствуют длине, все данные повреждаются.

Поэтому обычно предпочтительным методом манипулирования такими данными является сам PHP-код.

Примечательно, что есть несколько решений для восстановления данных изображения (плагины, команда WP CLI), но обычно это для дополнительных размеров, а не для исходного изображения. Я не уверен, справятся ли они с вашим делом, но вы можете попробовать. Сначала проверьте сначала, чтобы это не ухудшало ситуацию.

вам нужно неэтериализовать эту строку, тогда вы получите массив, который вы можете редактировать. Затем сериализуйте этот массив снова.

 $attachment_data_array=unserialize('a:6{s:5:"width"; ...'); //change array values as you need //for example $attachment_data_array['sizes']['thumbnail']['file']='newlink.jpg'; //then serialize again $data=serialize($attachment_data_array);