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

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

新規登録して質問してみよう
ただいま回答率
85.50%
WordPress

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

PHP

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

プラグイン

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

Q&A

解決済

1回答

676閲覧

WordPressのフックについて

退会済みユーザー

退会済みユーザー

総合スコア0

WordPress

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

PHP

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

プラグイン

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

0グッド

0クリップ

投稿2018/02/26 20:27

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にはどのように記述すればよろしいでしょうか?
よろしくお願いします。

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

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 03:06

編集2018/02/27 03:38
CHERRY

総合スコア25171

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2018/02/27 04:12

回答ありがとうございます。 マルチポストはNGなのですね。 初めてTeratailを利用して知りませんでした。大変失礼しました。 >Contact Form 7 の場合、ファイル名を決めている部分を置き換えるため、フックで置き換えることができる場所を探していくとwpcf7_file_validation_filter フックで wpcf7_file_validation_filter 関数( modules/file.php )を入れ替えることができますので、この関数を丸ごと入れ替えることになると思います。 この回答に全く頭がついていけていません。 何をどうしていいか・・・ すみません。
CHERRY

2018/02/27 05:46

何をどうしていいかと言われると「フックに関して勉強して理解してください」としか言えないのですが... ---- WordPress のフックは、あらかじめフックが実行できる場所が決められています。 フックを使うためには、そのフックでどこまでの範囲・内容が置き換わるのかをプログラムを読んで理解してから、プログラムを書く必要があります。
CHERRY

2018/02/27 05: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 06:29

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問