Ситуация такова:
Блог на данный момент имеет 2200+ сообщений. В начале (2007/2008) я использовал ручные выдержки, где я бы поставил изображение и немного текста. Ручная выдержка (поле выдержки, заполненное изображением и текстом) отображается в архивах и везде, где захочет.
Однако в последнее время я решил не использовать ручную выдержку (поле excerpt, заполненное изображением и текстом). Я переключился на автоматическую выдержку WordPress, ограничил количество слов и извлек первое изображение в сообщении (если есть), где бы я ни захотел. Таким образом, большая гибкость. Чтобы сохранить однородность сайта, я использую условный тег has_excerpt () для настройки или применения новых правил CSS для тех сообщений, у которых есть ручная выдержка. Условный тег проверяет, использует ли почта поле excerpt (имеет ручную выдержку).
Теперь я хочу удалить все ручные выдержки (поле excerpt, заполненное изображением и текстом), и в то же время пометить эти сообщения (например, добавление тега), чтобы иметь возможность продолжать применять условные правила CSS для этих сообщений. Например, используя has_tag () .
Я хочу сделать это, потому что эти сообщения имеют несколько разные изображения, чем другие сообщения, и я должен применять для них несколько разные правила CSS.
Теперь, когда есть тысячи сообщений, было бы безумным пробраться через них вручную. Я уверен, что есть простой способ сделать это с помощью нескольких команд SQl.
Некоторые вопросы легко решаются при поиске этого стека и объединении некоторых ответов.
Следующий плагин будет запускать код преобразования при активации. Отрегулируйте массив $tags
и не забудьте сделать резервную копию своей базы данных перед продолжением.
<?php /* Plugin Name: Remove Excerpts, Add Tags */ register_activation_hook( __FILE__, 'wpse_56133_add_tags_remove_excerpts' ); function wpse_56133_add_tags_remove_excerpts() { $tags = array( 'YOUR TAG NAME A HERE', 'YOUR TAG NAME B HERE' ); $args = array( 'post_type' => 'post', 'numberposts' => -1, 'post_status' => published ); $posts = get_posts( $args ); foreach ( $posts as $post ) { $po = array(); $po = get_post( $post->ID,'ARRAY_A' ); $po['post_excerpt'] = ""; wp_update_post( $po ); //set last value to false if you want to replace existing tags. wp_set_post_terms( intval( $post->ID ), $tags, 'post_tag', true ); } }