web-dev-qa-db-fra.com

Obtenez une nouvelle limace Wordpress à partir d'une ancienne limace Wordpress

J'ai implémenté un shortcode appelé post qui contient un attribut src qui a le lien d'un de page

[post src="http://www.listenmoneymatters.com/the-betterment-experiment/"]

Actuellement, ce code court crée un lien sophistiqué à partir des métadonnées de l'article:

// MORE INFORMATION LINK
add_shortcode('post', 'post_shortcode');
function post_shortcode($atts) {
    extract(shortcode_atts(array(
        "src" => '',
        "title" => '',
        "url" => '',
        "image" => ''
    ), $atts));

    $post_id = url_to_postid( $src );
    $post = get_post( $post_id );
    $post_title = get_the_title( $post_id );
    $post_thumb = get_the_post_thumbnail( $post_id, array(150,150) );
    if($post->post_excerpt == '') {
        $post_description = text_limit($post->post_content, 175);
    } else {
        $post_description = $post->post_excerpt;
    }


    return '
        <a title="'.$post_title.'" href="'.$src.'" class="moreinfo">
            '.$post_thumb.'
            <h4>'.$post_title.'</h4>
            <p>'.$post_description.'</p>
            <div class="clearfix"></div>
        </a>';
}

Le problème, c’est que les anciennes occurrences de ce shortcode renvoient à des publications dont le permalien a été modifié.

Comment puis-je rechercher l'ancien poste en fonction de son ancien permalien, puis faire en sorte que le code abrégé affiche le lien avec le nouveau permalien?

1
mollusk

Avant de commencer, permettez-moi de mentionner rapidement que, pour l’avenir, il est plus facile de référencer la publication par son ID plutôt que par l’URL, car celle-ci restera la même lorsque les slugs changent. Quoi qu'il en soit, comme vous avez déjà ce shortcode, nous avons besoin d'une autre solution.

Votre problème est que vous devez trouver une publication à partir de son URL lorsque le lien permanent est modifié. Heureusement, le vieux slug est stocké dans _wp_old_slug dans la postmetatable. Donc, ceci est deux étapes:

Obtenir le slug de l'URL

Je suppose que vous n’avez pas changé la structure du lien permanent, mais uniquement les limaces. Donc, voici le code pour extraire le slug de l'URL:

$url ='http://www.listenmoneymatters.com/the-betterment-experiment/';
$url = explode("/",$url);   // Split URL at "/"
$url = array_filter();      // Remove empty array entries so get rid of last "/"
$slug = array_pop($url);    // Get last URL Segment

Requête des messages pour cette limace

$posts = get_posts(array(
    'meta_key'         => '_wp_old_slug',
    'meta_value'       => $slug,
    'post_type'        => 'post',
));
1
kraftner