web-dev-qa-db-fra.com

Redirections de Tumblr vers de nouveaux WP

J'ai migré un site de Tumblr vers WordPress et j'ai pu récupérer tout le contenu (en morceaux) à l'aide du plugin FeedWordPress. Ce que j'essaie maintenant de faire, c'est de rediriger dynamiquement l'ancienne structure de permalien.

Le plugin a ajouté un champ personnalisé avec l'ancien permalien Tumblr (syndication_permalink est le nom du champ). Existe-t-il une fonction que je peux écrire à l'aide de wp_redirect pour rechercher ce champ et, le cas échéant, rediriger vers la nouvelle URL de lien permanent?

2
Norcross

Hey, vous pourriez avoir de la chance avec un plugin précédent que j'ai écrit ( voici le code lui-même ). Il s'agit d'un plug-in de redirection qui examine l'URL entrant, le compare à la table postmeta s'il est sur le point de produire un fichier 404, et redirige l'utilisateur si une correspondance est trouvée.

Si vous avez l'intégralité de l'URI stockée dans le champ personnalisé pour un article, cela peut ressembler à quelque chose comme:

/**
 * 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' );

La mise en garde est que je n'ai pas réellement testé le code, alors laissez-moi savoir si vous rencontrez des erreurs!

1
Daniel Bachhuber