WordPress Popular Postsプラグインのを使っているのですが、出力するのに
post_html' => "<li>{thumb}{title}</li>"
を記載するとサムネイルののurlが
http://example.com/wp-content/uploads/wordpress-popular-posts/2245-80x80.jpg
という風になり、
別に新着記事を表示するところではサムネイルを出力するのに
<?php echo the_post_thumbnail(); ?>
を記載するとサムネイルのurlが
http://example.com/wp-content/uploads/2014/11/xxx-80x80.jpg
という風に表示されます。
どちらも同じ画像ですが、URLが異なってしまっているので、できれば
共通のアドレスに統一したいです。
wp-content/uploads/の中のwordpress-popular-postsとうフォルダは消しても勝手に出来上がってしまいます。
特に何か設定したわけではないのですが、このフォルダに画像を保存させず通常の画像を収納している
uploads/月別フォルダの中の画像を使うようにするにはどう設定したらいいのでしょうか。
ネット上をいくら検索しても同様の症状が見つからず困っています。
お分かりになる方がいましたら、ご指導お願いいたします。
コメントへの返信も兼ねて回答します。
新着記事を表示する場合はpopular-postsは利用していないので、そうすると新着記事と人気記事を表示する場合、
画像URLを合わせることは出来ないということになるでしょうか?
それとも新着記事もpolular-postsを利用して表示させることが出来るのでしょうか。
WordPress Popular Postsプラグインの仕様変更により、「wp-content/uploads/wordpress-popular-posts」に画像が生成されるようになったのは理解したと思います。
WordPress Popular Postsプラグインには新着記事を表示する機能はありませんから、WordPressの標準機能かあるいは別のプラグインを利用して表示するしかありませんし、各々の画像URLを合わせる事もできません。
ただし、WordPress Popular Postsプラグインのサムネイル画像のURLをWordPress標準の機能で生成される画像に変更するカスタマイズは可能です。(調べたらちょうど良いフィルタが用意されていました。)
※WordPress Popular Postsプラグインが生成する画像は、人気記事として記録されている投稿および固定ページのみです。(新着記事のサムネイル画像をWordPress Popular Postsプラグインが生成する画像に合わせる場合、新着記事すべてが人気記事になるとは限りませんので、必要な画像がないという事になるかもしれませんし、前者のカスタマイズの方が比較的容易なようでした。)
次のコードを「functions.php」に追記してみてください。
function change_popularposts_thumb( $content, $p ) { $thumb_html = get_the_post_thumbnail( $p->id, 'thumbnail' ); preg_match( '!src="([^"]+)"!', $thumb_html, $thumb ); $new_content = preg_replace('!<img(.+?)? src="[^"]+"(.+?)>!', '<img$1 src="' . $thumb['1'] . '"$2>', $content ); return $new_content; } add_filter( 'wpp_post', 'change_popularposts_thumb', 10, 2 );
※WordPress Popular Postsプラグインの画像生成機能はそのままですので、「wp-content/uploads/wordpress-popular-posts」の中には人気記事の画像が生成されます。
サムネイル画像の生成を止めたい場合は、WordPress Popular Postsプラグイン本体を変更する必要があります。
「wordpress-popular-posts.php」の2292行目に次の行があります。
$new_img = $image->save( trailingslashit($this->uploads_dir['basedir']) . $p->id . '-' . $dimension[0] . 'x' . $dimension[1] . '.' . $file_info['extension'] );
上記を次のように変更してください。(すぐに戻せるように、元の記述はコメントアウトして残して置いた方が良いと思います。)
// $new_img = $image->save( trailingslashit($this->uploads_dir['basedir']) . $p->id . '-' . $dimension[0] . 'x' . $dimension[1] . '.' . $file_info['extension'] ); $new_img = 'dummy';
※画像生成の停止については、簡単に確認しただけです。
すみません。うっかりミスがありました。
関数内の次の行を
以下のどちらかに修正してみてください。
※ringomaruさん自身が試された「$thumb_html = get_the_post_thumbnail( $p->id,array(80,80),'thumbnail' );」の場合、渡す引数が正しくありません。
http://wpdocs.sourceforge.jp/%E3%83%86%E3%83%B3%E3%83%97%E3%83%AC%E3%83%BC%E3%83%88%E3%82%BF%E3%82%B0/get_the_post_thumbnail
それから、質問文の以下の箇所について書き忘れていましたが、「the_post_thumbnail()」に「echo」は不要ですので、「」とする必要があります。
※「the_post_thumbnail()」は、「get_the_post_thumbnail()」を呼び出して「echo」で出力します。
2014/11/26 15:24:27追加でご回答いただきありがとうございます。
2014/11/27 16:49:33自分で勝手に直してたまたま上手く表示できただけだったんですね。
私の$thumb_html = get_the_post_thumbnail( $p->id,array(80,80),'thumbnail' );だと、サイズに関することを2つもパラメーターに入れていた感じになっていたんですね。
$thumb_html = get_the_post_thumbnail( $p->id );に修正させていただきました。
the_post_thumbnailについては、つまり私の書き方だとecho echo get_the_post_thumbnail()となっていたという理解でいいでしょうか。
と書くとecho get_the_post_thumbnail()の処理を自動でしているということですよね。
もっと勉強しなくては駄目ですね。色々と教えていただいて本当に助かります。