Регенерировать слизняков из названия сообщений

возможно ли регенерировать слизни программно после изменения заголовков сообщения? Многочисленные заголовки сообщений были обновлены, и пул не был обновлен заголовком, поэтому мне нужно восстановить все эти пули.

Да, это возможно.

Образец кода должен быть проверен и уточнен:

// get all posts $posts = get_posts( array ( 'numberposts' => -1 ) ); foreach ( $posts as $post ) { // check the slug and run an update if necessary $new_slug = sanitize_title( $post->post_title ); if ( $post->post_name != $new_slug ) { wp_update_post( array ( 'ID' => $post->ID, 'post_name' => $new_slug ) ); } } 

Я только что сделал это, вероятно, есть некоторые ошибки и случаи egde, но это должно дать вам представление. Кроме того, это может занять некоторое время, поэтому было бы полезно разделить обновление на более мелкие куски.

Этот плагин также выполняет эту работу: http://www.jerrytravis.com/598/wordpress-plugin-to-generate-post-slugs

Тем не менее, поскольку он только делает это для сообщений, которые еще не имеют slug, если вам нужно регенерировать слизни, отредактируйте следующую строку в плагине:

if ($post->post_name == "") {

например, вы можете изменить его на:

if (true) {

Я пробовал метод, предложенный Toscho, который является «инстинктивным», но во многих случаях он не работает (с кодом ядра, чтобы получить то, что я подразумеваю под «многими случаями»).

Просмотрев код, я обнаружил wp_insert_post_data фильтра wp_insert_post_data , wp_update_post функцией wp_update_post перед тем, как вставить сообщение в базу данных.

$data['post_name'] этот фильтр и изменив значение $data['post_name'] , я смог заставить это работать правильно. WordPress классный, но настолько плохо документированный …

Я отредактировал документацию , чтобы больше людей могли найти это решение при необходимости.