web-dev-qa-db-ja.com

Tumblrから新しいへのリダイレクト WP

私はTumblrからWordPressにサイトを移行し、FeedWordPressプラグインを使用してすべてのコンテンツを(分割して)取得することができました。私が今やろうとしているのは、古いパーマリンク構造を動的にリダイレクトすることです。

プラグインは古いTumblrのパーマリンクを持つカスタムフィールドを追加しました(syndication_permalinkはフィールドの名前です)。このフィールドをチェックするためにwp_redirectを使って書くことができる関数はありますか、そしてもしそうなら新しいパーマリンクURLにリダイレクトしますか?

2
Norcross

こんにちは、私が書いた 前のプラグインで運が良かったかもしれませんここでコード自体を示します )。入ってくるURLを調べ、404を生成しようとしている場合はpostmetaテーブルと照合し、一致するものが見つかった場合はユーザーをリダイレクトするリダイレクトプラグインです。

投稿のカスタムフィールドにURI全体が格納されている場合は、次のようになります。

/**
 * Redirect old Tumblr URLs to new WP if the URI exists in the database
 */
function tumblr_legacy_redirect() {
    global $wpdb; // We're going to use this for the db lookup

    // Only run this lookup on URLs that are going to 404 anyway
    if ( is_404() ) {

        // We're getting the incorrect URI in hopes that it's an old Tumblr link
        $requested_url = $_SERVER['SERVER_NAME'] . $_SERVER['REQUEST_URI'];

        // Prepare the query so we protect ourselves against bad SQL queries
        $query = $wpdb->prepare( "SELECT post_id FROM $wpdb->postmeta WHERE meta_key='syndication_permalink' AND meta_value='%s'", $requested_url );
        $post_id = $wpdb->get_results( $query, 'ARRAY_N' );
        // Catch if there are duplicate results in the database
        $post_id = $post_id[0][0];

        // Build the redirect if the post_id exists
        if ( $new_url = get_permalink( $post_id ) ) {
            wp_redirect( $new_url, 301 );
        } else {
            return;
        }

   } // END - if ( is_404() )

} // END - tumblr_legacy_redirect()

// A good place for our template redirect to hook into
add_action( 'template_redirect', 'tumblr_legacy_redirect' );

警告は、私が実際にコードをテストしていないということですので、あなたが何らかのエラーに遭遇したかどうか私に知らせてください!

1