web-dev-qa-db-ja.com

投稿のタイトルからスラッグを再生成

投稿のタイトルを変更した後にプログラムでスラッグを再生成することは可能ですか?多数の投稿タイトルが更新され、スラッグはタイトルで更新されなかったので、これらすべてのスラッグを再生成する必要があります。

11

はい、可能です。

サンプルコード、テストして洗練する必要があります。

// 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ケースがあります、しかしそれはあなたに考えを与えるべきです。また、これにはしばらく時間がかかることがあるので、更新をより小さな塊に分割することが役に立つかもしれません。

15
fuxia

このプラグインはまた仕事をします: http://www.jerrytravis.com/598/wordpress-plugin-to-generate-post-slugs

ただし、スラッグをまだ作成していない投稿に対してのみ実行されるので、スラッグを再生成する必要がある場合は、プラグインの次の行を編集します。

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

たとえば、次のように変更できます。

if (true) {

2
Lessan Vaezi

Toschoが提案した「本能的な」方法を試していましたが、うまくいかないことが多くありました(コアコードを参照して「多くの場合」という意味にしてください)。

コードを見ると、post iuntをデータベースに挿入する直前にwp_insert_post_data関数によって呼び出されるwp_update_postフィルタフックが見つかりました。

このフィルタを呼び出し、$data['post_name']の値を変更することで、これを正しく機能させることができました。 Wordpressはかっこいいですが、あまり詳しく説明されていません...

私はドキュメントを編集しました 必要に応じてより多くの人々がこの回避策を見つけることができるように。

1