質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.49%

  • PHP

    24478questions

    PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

  • WordPress

    9106questions

    WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

  • プラグイン

    541questions

    プラグイン(plug-in)は、ソフトウェアアプリケーションの機能拡張の為に開発された、一組のソフトウェアコンポーネントのことを指します。

WordPressのフックについて

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 508

kenchan76jp

score 1

WordPressのフックについて教えてください。

プラグイン「ContactForm 7」
http://jisakupc-technical.info/web-survice/wordpress/4774/
上記サイトを参考に添付ファイル名を日本語でも送れるようにしてみました。

「wpmp-config-ja.php」の追加・編集はあっさり終了
(実際は「wpmp-config-.php」のファイル名にしました。)

次に「wp-includes/class-phpmailer.php」の編集
basename($path);をend(explode('/', $path));へ変更
basename($filename);は今のバージョンでは見当たらなかったので編集せず

次にプラグインの「wp-content/plugins/contact-form-7/includes/formatting.php」を編集もあっさり終了

これで確認すると、問題なく日本語ファイル名で送れるようになりました。
ただこの状態ですと、WordPress、及び、プラグインのコアファイルを編集しているため、各々をバージョンアップすると当然初期状態に戻ります。

WordPressだけをバージョンアップさせると、メールそのものが送れませんでした。
ContactForm7だけをバージョンアップさせると、「unnamed-file」のファイル名になり送信されました。

これらがバージョンアップされても日本語ファイル名で送れるようにフックさせたいのですが、イマイチやり方が分かりません。
http://9ensan.com/blog/wordpress/fix-wordpress-apply_filters-add_fl...

functions.phpにはどのように記述すればよろしいでしょうか?
よろしくお願いします。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

+2

Yahoo!知恵袋のWordPressのフックについて教えてください。 と同じ質問ですね。

Teratailのヘルプの「他のサービスにも質問投稿をしたい(してしまった)」に

teratailでは、マルチポスト*の推奨はしていません。
とありますので、ご注意ください。


各機能の中で do_action( 'HOOK_NAME' ) でフックを実行させている部分や add_action() や add_filter() 等でフックを追加している部分を探す必要があります。

その部分があれば、対象部分に対して、フックを使って処理を入れ替えたり、割り込ませることができますが、この記載がない場合は、フックで処理を変更することはできません。

前後に見つからない場合は、フックが見つかるまで、遡って探してみる必要があります。


PHPMailer は、PHPMailerをそのまま使っているだけですので、PHPMailer 内では、WordPressのフックで、機能の一部を置き換えることはできません。

メール送信を置き換えるプラグイン(例えば、WP Mail SMTP by WPForms)と同じようにメール送信機能全体を置き換えるように制作する必要があります。


Contact Form 7 の場合、ファイル名を決めている部分を置き換えるため、フックで置き換えることができる場所を探していくとwpcf7_file_validation_filter フックで wpcf7_file_validation_filter 関数( modules/file.php )を入れ替えることができますので、この関数を丸ごと入れ替えることになると思います。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/02/27 13:12

    回答ありがとうございます。
    マルチポストはNGなのですね。
    初めてTeratailを利用して知りませんでした。大変失礼しました。

    >Contact Form 7 の場合、ファイル名を決めている部分を置き換えるため、フックで置き換えることができる場所を探していくとwpcf7_file_validation_filter フックで wpcf7_file_validation_filter 関数( modules/file.php )を入れ替えることができますので、この関数を丸ごと入れ替えることになると思います。

    この回答に全く頭がついていけていません。
    何をどうしていいか・・・
    すみません。

    キャンセル

  • 2018/02/27 14:46

    何をどうしていいかと言われると「フックに関して勉強して理解してください」としか言えないのですが...

    ----

    WordPress のフックは、あらかじめフックが実行できる場所が決められています。
    フックを使うためには、そのフックでどこまでの範囲・内容が置き換わるのかをプログラムを読んで理解してから、プログラムを書く必要があります。

    キャンセル

  • 2018/02/27 14:48

    Contact Form 7 の `$filename = basename( $filename );` の書き換えを当てはめて考えると...
    ソースコードの変更では1行だけを書き換えていますが、この1行だけをフックで置き換えることはできませんので、フックで置き換えができる部分を調べる(探す)必要があります。

    この部分は、関数`wpcf7_antiscript_file_name` の中にありますが、この関数は、フックでの置き換えに対応していません。フックで置き換えできませんので、次はこの関数を呼び出し元を調べる必要があります。

    関数`wpcf7_antiscript_file_name`は、modules/file.php の関数`wpcf7_file_validation_filter` の中で呼び出されています。

    関数`wpcf7_antiscript_file_name`は、

    > add_filter( 'wpcf7_validate_file', 'wpcf7_file_validation_filter', 10, 2 );
    > add_filter( 'wpcf7_validate_file*', 'wpcf7_file_validation_filter', 10, 2 );

    のように add_filter で、WordPress に登録されているので、フックから呼び出されるのが確認できましたので、この関数を置き換えると任意の処理を追加・変更することが可能となります。

    キャンセル

  • 2018/02/27 15:29

    ありがとうございます。
    勉強してからチャレンジしてみます。

    キャンセル

同じタグがついた質問を見る

  • PHP

    24478questions

    PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

  • WordPress

    9106questions

    WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

  • プラグイン

    541questions

    プラグイン(plug-in)は、ソフトウェアアプリケーションの機能拡張の為に開発された、一組のソフトウェアコンポーネントのことを指します。