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?
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 postmeta
table. Donc, ceci est deux étapes:
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
$posts = get_posts(array(
'meta_key' => '_wp_old_slug',
'meta_value' => $slug,
'post_type' => 'post',
));