Intereting Posts
Оператор PHP if работает в файлах шаблонов, но не в заголовке Вывод в XHTML или HTML 5 для плагинов? Как форматировать HTML-код короткого кода во внешнем файле Индивидуальные почтовые типы и таксономии Worpdress Несколько копий одного и того же сайта: как организовать код / ​​архитектуру? Как распознаются обновления файла style.css в дочерней теме? Пользовательский заказ get_terms Как передать переменные в аргумент функции, используя add_action Внедрение предварительной выборки DNS с помощью WordPress Захват save_post не вызывается, когда сообщение сохраняется Могу ли я изменить header.php текущей темы через функцию плагина? Петля с динамическими категориями Как создать пользовательскую таксономию 404 get_posts () и WP_query ограничивает условия «И» максимум до 6 для запросов метаданных в WordPress Проблема при добавлении пользовательских ссылок или страниц в мое меню

Как изменить значение _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);