[解決済み] ベストセラーウィジェットに画像を表示させたい。

2010 年 6 月 17 日

ホーム フォーラム テンプレート(テーマ) [解決済み] ベストセラーウィジェットに画像を表示させたい。

このトピックには14件の返信が含まれ、5人の参加者がいます。5 年、 10 ヶ月前 akemi さんが最後の更新を行いました。

15件の投稿を表示中 - 1 - 15件目 (全15件中)
  • 投稿者
    投稿
  • #49819

    gasa
    参加者

    すみません。

    welcartデフォルトテーマの左サイドバーのベストセラーウィジェットに商品画像を表示させたいのですが、

    どうすればいいでしょうか?

    おすすめウィジェットのように、

    php usces_the_itemImage

    を挿入すればいいと思いusces_bestseller.phpの

    php usces_list_bestseller($rows_num)の直前に挿入してやってみました

    が、一覧のトップの商品画像が出てしまいます。。。

    template_func.phpの中にそれらしいモノがないかと探してみても無いようです

    よろしくお願いいたします。

    #59814

    nanbu
    参加者

    こんにちは。

    usc-e-shop/functions/template_func.php のusces_list_bestseller() という関数をご覧ください。この中にusces_widget_bestseller_auto_text というフックが有ります。このフックに引っ掛けてフィルターをかけます。そうすることで本体に改変を加えずともご要望の表示をさせる事ができます。

    フックやフィルターについてはこちらをご覧ください。

    プラグイン API

    不用意に本体をハックしてはいけません。

    まずはこの開発フォーラムで、どのフックを使えばいいのか、また存在しない場合は本体に新たなフックの設置が可能かどうかをお尋ねください。

    #59815

    kami
    参加者

    kamiです。

    フックについて書いてあったので失礼します。

    『 usces_widget_bestseller_auto_text 』

    上記のフックの中身はどこに記述すれば良いのでしょうか?

    外部ファイルにフックの一覧が定義されているということでしょうか?

    フックについてよくわからず、申し訳ありませんが、どうぞよろしくお願いましす。

    #59816

    nanbu
    参加者

    フックはWelcart の機能ではなくWordPress のAPI です。その詳細は僕がここで説明するまでも無く「WordPress Codex」に全て記述されています。まずはそちらで知識を得て技術を習得してください。

    ヒントを申し上げますと

    フックに引っ掛けて自分で作った関数を実行することになります。その一連のコードはテーマフォルダの中のfunctions.php に記述するのが手っ取り早いと思います。大掛かりな場合は拡張プラグインを自分で作ることになります。Welcart 自体も全てフックに引っ掛けてWordPress を拡張しているのです。

    趣味の範囲ならともかく、WordPress でカスタマイズを仕事にしたいと考えている方は「プラグイン API」をマスターするといいですよ。

    #59817

    gasa
    参加者

    お返事遅くなり、すみません。

    難しそうですが、PHPの勉強のテーマが出来たので頑張ります!

    一応解決済みとします。

    できたらご報告いたします。

    素早いご回答ありがとうございました。

    #59818

    gasa
    参加者

    すみません。追加で質問なのですが、

    usces_widget_bestseller_auto_text

    というフィルターフックの適用タイミングはどこで定義されているのでしょうか?

    マルチファイル検索しても、usc-e-shop/functions/template_func.php

    の中にしか見つからず、wordpress本体も検索しても見つからずで。。。

    何度もすみません。

    #59819

    nanbu
    参加者

    こんにちは。

    usc-e-shop/functions/template_func.php の中で正解です。

    そのusces_list_bestseller() と言う関数がベストセラーのリストを生成しています。

    フィルターが代入している $disp_text がアンカーの中に設置されていますよね。その値を関数でリターンしてやればいいのです。

    フィルターは2つの引数を送っています。大切なのは2つ目の$ids[$i](post_id)で、独自の関数ではこれを取得して商品の関連データを探し出すことになります。

    #59820

    gasa
    参加者

    nanbu様

    できたようです。。。

    $disp_img = apply_filters('usces_widget_bestseller_auto_text', usces_the_itemImage($number = 0, $width = 150, $height = 150, $post ), $ids[$i]);
    $htm .= "<li><img src='" . get_permalink($ids[$i]) . "'>" . $disp_img . "</a></li>?n";

    上記をbestseller関数の

    $disp_text = apply_filters('usces_widget_bestseller_auto_text', wp_specialchars($post->post_title), $ids[$i]);

    の後に挿入したら表示できました!

    前回の質問の仕方が悪かったのだと思いもう一度聞きますが、

    usces_widget_bestseller_auto_text

    というフックが定義されているファイルが分かりません。

    例えば、wordpressデフォルトのフィルターフックの

    comment_excerpt

    ならば、以下のような説明があります。

    『comment_excerpt関数を使ってデータベースから取得したコメント抜粋に適用される。』

    なので、usces_widget_bestseller_auto_textの正体がわからず悶々としています。

    外部ファイルに「こういう動きをする」みたいなプログラムも見つからないので辿っていけず。。

    多分どこかで独自フィルターフックを登録しているはず!と考えて探していたのですが、、、

    すみません、かなり的を得てない質問かもしれません。

    #59821

    nanbu
    参加者

    こんにちは。

    template_func.php をハックしてしまってはフックの意味が有りません。

    まずはtemplate_func.php を元に戻してください。

    フックがどれか判らないという事ですが、apply_filters がフックなのです。

    従って、apply_filters(‘usces_widget_bestseller_auto_text’,・・・・) がusces_widget_bestseller_auto_text というフィルターフックなのです。

    次のコードをテーマ内のfunctions.php に記述してください。

    add_filter( 'usces_widget_bestseller_auto_text', 'my_bestseller', 10, 3);
    function my_bestseller(){
    $args = func_get_args();
    $post_id = $args[1];
    $post = get_post($post_id);
    $str = usces_the_itemImage(0, 60, 60, $post, 'return' ) . wp_specialchars($post->post_title);
    return $str;
    }

    #59822

    gasa
    参加者

    nanbu様

    できました!

    こういう仕組みになっているんですね。。。

    何度もすみませんでした。

    ありがとうございました!

    #59823

    saorin
    参加者

    nanbu様

    上記のやりとりを拝見させていただき、

    add_filter( ‘usces_widget_bestseller_auto_text’, ‘my_bestseller’, 10, 3);

    function my_bestseller(){

    $args = func_get_args();

    $post_id = $args[1];

    $post = get_post($post_id);

    $str = usces_the_itemImage(0, 60, 60, $post, ‘return’ ) . wp_specialchars($post->post_title);

    return $str;

    }

    上記のコードをテーマ内のfunctions.php に記述してみたのですが、うまく画像が表示されません。。。

    やりかたが間違っているのでしょうか?

    他に変更すべき箇所があるのでしょうか?

    ウィジットで、ベストセラーを選び、右のサイドバーに配置しています。

    ちなみに、手書きリストを選択しています。

    どうぞよろしくお願いいたします。

    #59824

    nanbu
    参加者

    こんにちはsaorinさん。

    手書きリストの方にはフックがありませんでしたので次期バージョンで追加したいと思います。フィルター名は’usces_widget_bestseller_manual_text’となる予定です。

    #59825

    akemi
    参加者

    お世話になります。

    2011/11/6に更新された、Welcart 1.0.7バージョンには追加されていないですね?次期バージョンになりますでしょうか?

    楽しみにしてます。宜しくお願いします。

    #59826

    nanbu
    参加者

    こんにちは、akemiさん。

    ‘usces_widget_bestseller_manual_text’フックは、usces_bestseller.php にございます。1.0.7 には既に入っております。

    #59827

    akemi
    参加者

    nanbuさん、こんにちは。

    お陰様でできました!嬉しいです。

    本当にありがとうございました!

15件の投稿を表示中 - 1 - 15件目 (全15件中)

このトピックに返信するにはログインが必要です。