web-dev-qa-db-fra.com

Comment obtenir l'URL relative d'une image sélectionnée de taille moyenne?

Comment afficher l'URL relative de l'image sélectionnée (de taille moyenne) (par rapport à la racine du site Web)?

J'ai besoin de quelque chose comme ça: uploads/214/07/image-600x400.png

J'ai essayé avec ça:

if ( has_post_thumbnail()) {
    $medium_image_url = wp_get_attachment_image_src( get_post_thumbnail_id($post->ID), 'medium');
    echo $medium_image_url[0];  
}

Cela fonctionne bien, je reçois le chemin de l'image sélectionnée de taille moyenne, mais avec le nom de domaine aussi, et j'en ai besoin sans nom de domaine.

Aussi j'ai essayé comme ça:

global $wpdb;
$the_thumbnail_id = get_post_thumbnail_id($post->ID);
$the_thumbnail_name = $wpdb->get_var( "SELECT meta_value FROM $wpdb->postmeta WHERE post_id = '$the_thumbnail_id' AND meta_key = '_wp_attached_file'" );
//
echo $the_thumbnail_name;

Cela fonctionne bien, je ne reçois que le chemin relatif, mais le chemin de l'image sélectionnée "complète", et j'ai besoin du chemin de l'image sélectionnée "moyenne".

Quelqu'un peut-il m'aider, peut-être à revoir la conception (ajouter un paramètre pour la "taille moyenne") de la deuxième fonction ou une nouvelle approche?

1
Advanced SEO

Vous êtes sur la bonne voie avec votre premier extrait - à partir de là, il est facile de supprimer des parties de l'URL: vérifiez ce que WP a stocké en tant que racine du site, puis utilisez les fonctions de chaîne de php pour extraire cette partie de votre image URL.

// inside the post loop, in a template file
if ( has_post_thumbnail()) {
  $medium_image_url = wp_get_attachment_image_src( get_post_thumbnail_id($post->ID), 'medium');
  $domain = get_site_url(); // returns something like http://domain.com
  $relative_url = str_replace( $domain, '', $medium_image_url[0] );
  echo $relative_url;
}

Si vous vouliez que cela existe en tant que fonction réutilisable:

// functions.php
function get_relative_thumb( $size ) {
   global $post;
   if ( has_post_thumbnail()) {
     $absolute_url = wp_get_attachment_image_src( get_post_thumbnail_id($post->ID), $size);
    $domain = get_site_url(); // returns something like http://domain.com
    $relative_url = str_replace( $domain, '', $absolute_url[0] );
    return $relative_url;
   }
}

// in a template file
<?php 
      while (have_posts) : the_post();

      // ... post loop content before the thumbnail

      echo get_relative_thumb( 'medium' ); 

      // ... post loop content after the thumbnail

      endwhile;
?>

(Remarque - le résultat de cette opération comprendra probablement toujours la partie "wp-content /" du chemin; si vous devez le supprimer, il commence simplement par "upload", ajoutez simplement "wp-content" à la variable $ domain avant d’exécuter str_replace (si cela est destiné à une version générale, vous devriez utiliser les fonctions intégrées de wordpress pour obtenir le chemin par programmation, au cas où quelqu'un n'utiliserait pas la structure de répertoire typique 'wp-content'.)

2
jack