web-dev-qa-db-ja.com

中サイズのおすすめ画像の相対URLを取得する方法

注目の画像(中サイズ)の相対URL(Webサイトのルートに対して)を表示するにはどうすればよいですか?

私はこのようなものが必要です:uploads/214/07/image-600x400.png

私はこれを試してみました:

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

それはうまく働きます、私は中型の特色にされたイメージの道を得ます、しかし、ドメイン名でも、そして私はドメイン名なしでそれを必要とします。

また私はこのようにしてみました:

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;

これはうまくいきます、私はただ相対的なパスを得ます、しかし、「フル」サイズの特色にされたイメージパス、そして私は「中」サイズの特色にされたイメージパスを必要とします。

誰かが私を手伝うことができますか、おそらく2番目の機能の再設計(「中」サイズのための何らかのパラメータの追加)、または何らかの新しいアプローチ?

1
Advanced SEO

あなたは最初のスニペットで正しい軌道に乗っています - そこからURLの部分を削除するのは簡単です:WPがサイトのルートとして保存しているものをチェックし、そしてその部分を切り取るためにphpの文字列関数を使いますあなたの画像の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;
}

これを再利用可能な関数として存在させたい場合は、

// 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;
?>

(注 - これからの結果には、まだパスの 'wp-content /'部分が含まれている可能性があります。これを削除する必要がある場合は、 'upload'から始まるだけで、$ domain変数に 'wp-content'を追加するだけです。 str_replaceを実行する前に(一般的なリリースを意図している場合は、誰かが典型的な 'wp-content'ディレクトリ構造を使用していない場合に備えて、ワードプレスの組み込み関数を使用してプログラムでパスを取得します。)

2
jack