WordPress Popular Postsが取得する画像URLを変更したいです。


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/月別フォルダの中の画像を使うようにするにはどう設定したらいいのでしょうか。
ネット上をいくら検索しても同様の症状が見つからず困っています。
お分かりになる方がいましたら、ご指導お願いいたします。

回答の条件
  • 1人2回まで
  • 登録:
  • 終了:2014/11/26 11:12:39
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:rouge_2008 No.1

回答回数595ベストアンサー獲得回数351

ポイント200pt

コメントへの返信も兼ねて回答します。

新着記事を表示する場合は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';

※画像生成の停止については、簡単に確認しただけです。

他4件のコメントを見る
id:rouge_2008

すみません。うっかりミスがありました。
関数内の次の行を

	$thumb_html = get_the_post_thumbnail( $p->id, 'thumbnail' );

以下のどちらかに修正してみてください。

	$thumb_html = get_the_post_thumbnail( $p->id );

	$thumb_html = get_the_post_thumbnail( $p->id, 'post-thumbnail' );


※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

使い方

<?php echo get_the_post_thumbnail( $post_id, $size, $attr ); ?>

パラメータ

$post_id
(整数) (オプション) 投稿 ID
初期値: 投稿 ID
$size
(文字列 または 配列) (オプション) (整数/配列) (任意) 画像サイズ。明示的に指定するときはキーワード(thumbnail, medium, large, full) または幅と高さをピクセルで指定する要素 2 つの配列、例えば array(32,32)。
初期値: 'post-thumbnail'
$attr
(文字列 または 配列) (オプション) 属性/値を配列で記述。詳しくは wp_get_attachment_image参照。
初期値: なし


それから、質問文の以下の箇所について書き忘れていましたが、「the_post_thumbnail()」に「echo」は不要ですので、「」とする必要があります。

別に新着記事を表示するところではサムネイルを出力するのに

を記載するとサムネイルのurlが
http://example.com/wp-content/uploads/2014/11/xxx-80x80.jpg
という風に表示されます。

※「the_post_thumbnail()」は、「get_the_post_thumbnail()」を呼び出して「echo」で出力します。

2014/11/26 15:24:27
id:ringomaru

追加でご回答いただきありがとうございます。
自分で勝手に直してたまたま上手く表示できただけだったんですね。
私の$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()の処理を自動でしているということですよね。
もっと勉強しなくては駄目ですね。色々と教えていただいて本当に助かります。

2014/11/27 16:49:33
  • id:rouge_2008
    プラグインの仕様変更によるもののようです。
    テンプレートタグの「wpp_get_mostpopular()」でもウィジェットの場合でも同様の動作結果になります。
    ※「post_html」パラメータの指定の有無は関係ありません。

    ・Changelog
    https://wordpress.org/plugins/wordpress-popular-posts/changelog/
    -----------------------------------------------------------
    3.1.0
    ,,,

    ・Thumbail generation process has been refactored for efficiency.
    ・Thumbnails are now stored in a custom folder under Uploads.
    -----------------------------------------------------------


    「WordPress Popular Posts」の設定オプション「Tools」タブ「Thumbnails」に「Empty image cache」ボタンが追加されていると思います。
    「Use this button to clear WPP's thumbnails cache」という説明がありますが、このボタンをクリックすると「wp-content/uploads/wordpress-popular-posts」に生成されたサムネイル画像が削除されます。
    「wpp_get_mostpopular()」またはウィジェットでサムネイル画像のサイズを変更後にサイトにアクセスすると、その都度新しいサイズのサムネイル画像が生成される仕組みですので、この変更により不要なサムネイル画像の削除が容易になりました。
    今後は、サムネイル画像のサイズ変更後には上記のボタンをクリックして利用する事をおすすめします。

    ※今後は「wp-content/uploads/wordpress-popular-posts」の画像が利用されます。(以前のバージョンで「wp-content/uploads//??/??」に生成されたサムネイル画像は手動で削除してみてください。
  • id:rouge_2008
    解決した場合、質問をキャンセルではなく締め切り状態にして、そのまま自動終了まで待つようにお願いします。
    回答がない状態でキャンセルすると質問が消えてしまいます。
  • id:ringomaru
    コメントありがとうございます。
    popular-postsが「wp-content/uploads/wordpress-popular-posts」の中の画像を使うようになったことは分かったのですが、
    新着記事を表示する場合はpopular-postsは利用していないので、そうすると新着記事と人気記事を表示する場合、
    画像URLを合わせることは出来ないということになるでしょうか?
    それとも新着記事もpolular-postsを利用して表示させることが出来るのでしょうか。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません