Массовое редактирование записей

Есть каталог машин. В нём все машины имеют свои уникальные номера, не по порядку. Раньше Я записывал их в начало заголовка (например, «92. Toyota Ist 2002 год»), но теперь пришла необходимость убрать номер из заголовка и вставить его в дополнительное поле.
Можно сделать это без ручного редактирования каждой записи? А то Я этот каталог уже дважды перебирал, а там около 80 записей!

28 Комментарии

      • Если да, то тут никак, кроме прямого редактирования, не решить проблему. Однако можно упростить редактирование, если воспользоваться плагинами наподобие Search and Replace. Он позволяет напрямую в базе данных искать и заменять текст, не редактируя каждый пост.

        • Удаляет из заголовка записей номер вместе с точкой и пробелом и вставляет его записям дополнительным полем с именем «name».

          • То есть скрипт ищет в заголовке цифры, удаляет их оттуда и переносит в произвольное поле. А это поле точно называется name? Или number?

      • Для года:

        < ?php
        include 'wp-load.php';
        $posts = get_posts('numberposts=-1');
        foreach ( $posts as $post ) {
        	preg_match('/(.*) ([0-9]{4})/', $post->post_title, $matches);
        	if ( !empty($matches) ) {
        		echo "Post #{$post->ID}
        n"; echo "Title: {$matches[1]}
        n"; $post->post_title = $matches[1]; wp_update_post($post); echo "Year: {$matches[2]}
        n"; add_post_meta($post->ID, 'year', $matches[2], true); } } echo 'All Done!'; ?>

        Стоит сделать бэкап и в этот раз :)

        • Н-да, фрагмент опять отобразился некорректно (ниже оставил комментарий по этому поводу, он пока в модерации).

          Полный фрагмент: http://wordpress.pastebin.com/YiN1r0BP

          Вероятно, нужно было вставлять без <?php и ?>. Но даже в этом случае некоторые детали пропадают (например, во фрагменте, который Grawl вставил ниже, отсутствуют теги <br />).

          • На счет тегов <br/> – приведите пример кода. У меня вроде нормально отображается все.
            По поводу остального кода – есть баг с отображением вот этого куска кода: <?php – добавляется лишний пробел между < и ?php. Чтобы этого не происходило, < можно вставлять так:
            [img]http://dl.dropbox.com/u/2027201/Images/tiaurus-2011-01-23_093222.png[/img]

          • Понятно, спасибо. Пример можно посмотреть по исходной ссылке на Pastebin. Наверное, <br /> тоже нужно было вставлять через &lt; и &gt;. Это терпимо, хотя и не очень удобно.

  1. Вижу, что tiaurus волнуется за сохранность пригодившегося скрипта. Думаю, неплохо будет увековечить его здесь:

    include 'wp-load.php';
    $posts = get_posts('numberposts=-1');
    foreach ( $posts as $post ) {
            preg_match('/([0-9]*). (.*)/', $post->post_title, $matches);
            if ( !empty($matches) ) {
                    echo "Post #{$post->ID}n";
     
                    echo "Number: {$matches[1]}n";
                    add_post_meta($post->ID, 'number', $matches[1], true);
     
                    echo "Title: {$matches[2]}n";
                    $post->post_title = $matches[2];
                    wp_update_post($post);
            }
    }
    echo 'All Done!';
    
  2. Не по теме — придумал решение проблемы с тегами внутри кода (для <?php, <br /> и любых других) при использовании SyntaxHighlighterPro. Можно добавить фрагмент в functions.php темы:

    function esc_html_for_php($comment_text) {
    	preg_match('/
    (.*?)

    /is', $comment_text, $matches);
    if ( !empty($matches) )
    $comment_text = str_replace($matches[1], esc_html($matches[1]), $comment_text);
    return $comment_text;
    }
    add_filter('comment_text', 'esc_html_for_php', 0);

Оставить комментарий

Ваш электронный адрес не будет опубликован.


*