Это поздний ответ, но я хотел дать более чистую версию ответа, который дал alesub
.
function wp21418_append_to_post_name() {
// Checks to see if the option images_updated has been set or has a value of true.
if ( get_option( 'images_updated' ) === 'true' ) :
return;
endif;
// get all attachment posts.
$attachments = get_posts([
'post_type' => 'attachment',
'post_status' => 'inherit',
'name' => $p->slug,
'posts_per_page' => -1,
]);
// For each attachment, loop and update the post_name
foreach($attachments as $p){
$attachment = array(
'ID' => $p->ID,
'post_name' => $p->post_name.'-image'
);
// Update the post into the database
wp_update_post( $attachment );
}
// Once everything is looped, add the option to the database.
add_option( 'images_updated', 'true' );
}
add_action( 'after_setup_theme', 'wp21418_append_to_post_name' );
Эта функция запускается на хуке действия сразу после настройки темы.Первая строка проверяет, есть ли опция в базе данных images_updated
.Если эта опция существует, мы обращаемся к функции, и она не выполняет никакой обработки.В противном случае, если опция не существует, она запускает функцию и устанавливает опцию в самом конце.
Это делает так, что она будет работать только один раз.Вам не нужно удалять функцию после обновления.Если вы хотите запустить его снова, вы можете просто удалить оператор if
вверху. В качестве предостережения : выполнение этого добавит еще один -image
в конце post_names
, даже если у них уже есть -image
(например, -image-image
)
Может быть больше файловпроверка имени для этой ситуации.Обновит ответ, если кому-то это действительно нужно.