Ремонтируем поле GUID у вложений
Поле guid в таблице post для вложений в 90% случаев ведет на сам файл - является УРЛом файла. Этим полем удобно пользоваться, чтобы в коде получить ссылку на файл, в обход стандартной функции WordPress wp_get_attachment_url(). Нужно это для экономии ресурсов, подробнее читайте тут.
Однако при переезде на другой домен заменить это поле у всех вложений - сложная задача. Чтобы сделать это быстро, используйте мой маленький плагин.
/** * Plugin Name: Repair Attachment Guid * Author: Kama * Description: Regenerate attachments "guid" field in posts table in DB. <a class="button" href="?rep_attch_guid">Regenerate</a>. * Version: 0.1 */ if( ! is_admin() ){ return; } if( ! isset( $_GET['rep_attch_guid'] ) ){ return; } add_action( 'plugins_loaded', 'rep_attch_guid' ); function rep_attch_guid() { global $wpdb; if( ! current_user_can( 'manage_options' ) ){ return; } $attchs = $wpdb->get_results( $wpdb->prepare( "SELECT SQL_CALC_FOUND_ROWS ID, guid FROM $wpdb->posts WHERE post_type = 'attachment' AND guid NOT REGEXP %s", sprintf( "https?://%s.*", preg_quote( $_SERVER['HTTP_HOST'] ) ) ) ); if( $attchs ){ $found = $wpdb->get_var( "SELECT FOUND_ROWS()" ); $done = []; foreach( $attchs as $attch ){ $new_guid = wp_get_attachment_url( $attch->ID ); $up = $wpdb->update( $wpdb->posts, [ 'guid' => $new_guid ], [ 'ID' => $attch->ID ] ); if( $up ){ $done[] = $attch->ID; } } add_action( 'admin_notices', function() { echo '<div id="message" class="updated notice is-dismissible"> <p>Updated ' . count( $done ) . " from $found: " . implode( ', ', $done ) . '</p> </div>'; } ); } else{ add_action( 'admin_notices', function() { echo '<div id="message" class="updated notice is-dismissible"><p>No GUID found for update</p></div>'; } ); } }
Перед использованием обязательно создайте резервную копию БД.
Аналогичный плагин, только для управления всеми ревизиями вы можете найти в статье: Оптимизация производительности WordPress за счет постоянных ссылок (практика)