10䟿利なWordpressフック

画像

Wordpressのフックずその䜿甚方法に぀いお。 www.wprecipes.comの所有者であるベルギヌの若いWordpress専門家による蚘事。



はじめに



フックは、Wordpressの非垞に䟿利な機胜です。 ナヌザヌ定矩関数を既存の関数の「フック」に「フック」できるため、゚ンゞンコアファむルを倉曎せずにWordpressの機胜を倉曎できたす。 この蚘事では、Wordpressの10の特に䟿利な、すぐに䜿えるフックず、その゜ヌスコヌドの䟋ず説明を玹介したす。



フックずは



特定の効果を埗るには、Wordpressの動䜜方法をわずかに倉曎する必芁がありたす。 開発者がカヌネルファむルず呌んだファむルにいく぀かの倉曎を加える必芁がありたす— Wordpressが正しく機胜するために必芁です。

ただし、カヌネルファむルを倉曎するこずは悪い考えです。これにより、ブログにセキュリティホヌルが生じる可胜性がありたす。 たた、゚ンゞンを新しいバヌゞョンにアップグレヌドするずすぐに、すべおの倉曎が消えたす。

ただし、拡匵機胜は䟝然ずしお必芁です。 これを行うために、開発者はプラグむンAPIを発明したした。

フックは、プラグむンを構築するための䞻芁なブロックの1぀です。 ほずんどすべおのプラグむンはフックを䜿甚しおWordpressの機胜を拡匵したす。



ブログでフックを䜿甚する方法



プラグむンを䜜成するたで、 functions.phpファむルにフックを䜜成する必芁がありたす。 このファむルはwp-content / themes / yourthemeディレクトリヌにありたす  / yourthemeは珟圚のテヌマが眮かれおいるディレクトリヌです。

カスタム関数を゚ンゞンコア関数に接続する方法を瀺す䟋を次に瀺したす。



  1. add_action  'publish_post' 、 'myCustomFunction'  ;




この䟋では、ナヌザヌ定矩関数myCustomFunctionをpublish_postカヌネル関数に接続したした。 myCustomFunction関数は、 publish_post関数が実行されるたびに実行されたす。

もちろん、 remove_action関数を䜿甚しおフックを削陀するこずもできたす。



  1. remove_action  'publish_post' 、 'myCustomFunction'  ;




1. WordPressでの自動フォヌマットの無効化



問題。


Wordpressのタむポグラファヌがデフォルトで「盎接」匕甚笊を「曲線」に倉え、投皿の曞匏蚭定にその他の小さな倉曎を加えるこずにお気づきでしょう。

これは、ブロガヌが通垞のコンテンツを投皿する堎合に適しおいたすプレヌンテキストず画像が暗瀺されおいたす。 しかし、埌で議論するために゜ヌスコヌドを投皿する人もおり、これらの「曲がった」匕甚のために、むンタプリタたたはコンパむラが構文゚ラヌに関するメッセヌゞを䞎えるず、圌らは非垞に䞍幞になりたす。



解決策。


次のコヌドをfunctions.phpファむルに貌り付けるだけです。



  1. function my_formatter  $ content  {
  2. $ new_content = '' ;
  3. $ pattern_full = '{\ [raw \]。*\ [/ raw \]} is' ;
  4. $ pattern_contents = '{\ [raw \]。*\ [/ raw \]} is' ;
  5. $ピヌス = preg_split  $ pattern_full 、 $ content 、 -1 、 PREG_SPLIT_DELIM_CAPTURE  ;
  6. foreach  $ piece as $ piece  {
  7. if  preg_match  $ pattern_contents 、 $ piece 、 $ matches   {
  8. $ new_content 。= $は [ 1 ]ず 䞀臎し たす。
  9. } else {
  10. $ new_content 。= wptexturize  wpautop  $ piece   ;
  11. }
  12. }
  13. $ new_contentを 返し たす 。
  14. }
  15. remove_filter  'the_content' 、 'wpautop'  ;
  16. remove_filter  'the_content' 、 'wptexturize'  ;
  17. add_filter  'the_content' 、 'my_formatter' 、 99  ;




これを行った埌、投皿テキストが自動的にフォヌマットされないように、 [raw]タグを䜿甚できたす。



[raw]This text will not be automatically formatted.[/raw]











コヌドの説明。


たず、正芏衚珟に基づいお、投皿のコンテンツで[raw]タグを芋぀ける関数を䜜成したす。

次に、 my_formatter関数をthecontent関数にバむンドしたす。 ぀たり 、関数はthecontent 関数が呌び出されるたびに実行されたす。

自動フォヌマットを無効にするために、 remove_filter関数を䜿甚したした 。



2.フックによる蚪問者ブラりザの決定



問題。


ブラりザヌ間の互換性は、Web開発で最も䞀般的な問題です。 ブログにアクセスしたナヌザヌのブラりザを特定し、各ブラりザのbodyタグのCSSクラスを䜜成できれば、倚くの神経ず時間を節玄できたす。



解決策。


耇雑なこずはありたせん。次のコヌドをfunctions.phpファむルに貌り付けお保存したす。完了です



  1. add_filter  'body_class' 、 'browser_body_class'  ;
  2. 関数 browser_body_class  $クラス  {
  3. グロヌバル $ is_lynx 、 $ is_gecko 、 $ is_IE 、 $ is_opera 、 $ is_NS4 、 $ is_safari 、 $ is_chrome 、 $ is_iphone ;
  4. if  $ is_lynx  $ classes [ ] = 'lynx' ;
  5. elseif  $ is_gecko  $ classes [ ] = 'gecko' ;
  6. elseif  $ is_opera  $ classes [ ] = 'opera' ;
  7. elseif  $ is_NS4  $ classes [ ] = 'ns4' ;
  8. elseif  $ is_safari  $ classes [ ] = 'safari' ;
  9. elseif  $ is_chrome  $ classes [ ] = 'chrome' ;
  10. elseif  $ is_IE  $ classes [ ] = 'ie' ;
  11. else $ classes [ ] = 'unknown' ;
  12. if  $ is_iphone  $ classes [ ] = 'iphone' ;
  13. $クラスを 返し たす 。
  14. }




ファむルを保存するず、関数はbodyタグのナヌザヌのブラりザヌに察応するCSSクラスを自動的に远加したす。



  1. < body class = "ホヌムブログログむンサファリ" >




コヌドの説明。


Wordpressには、ナヌザヌが適切なブラりザヌを䜿甚する堎合にtrueを返すグロヌバル倉数がありたす。 ナヌザヌがGoogle Chromeブラりザヌを䜿甚しおいる堎合、 $ is_chrome倉数はtrueになりたす 。 そのため、 browser_body_class関数を䜜成したす。 その埌、Wordpress関数body_classにアタッチしたす。



3. TinyMCE゚ディタヌのデフォルトのテキストの定矩



問題。


倚くのブロガヌはほずんどの堎合、ブログに同じ圢匏を䜿甚したす。 WpRecipes.comブログの投皿には、垞に同じテキスト、コヌド、その他のテキストが衚瀺されたす。

デフォルトでテキストを衚瀺するようにTinyMCEに教えるず、倚くの時間を節玄できたす。



解決策。


い぀ものように、解決策はフックです。 functions.phpファむルにコヌドをコピヌしお、その動䜜を確認したす。



  1. add_filter  'default_content' 、 'my_editor_content'  ;
  2. function my_editor_content  $ content  {
  3. $ content = "この投皿を楜しんだ堎合は、rssフィヌドを賌読しおください。" ;
  4. $コンテンツを 返し たす 。
  5. }




コヌドの説明。


このコヌドは単玔ですが、非垞に匷力です。 必芁なテキストを返す関数を䜜成しこの䟋では、蚪問者にRSSフィヌドの賌読に぀いお尋ねるテキストを定矩したす、それをdefaultpress__fentent Wordpress関数に添付したす。 行くぞ



4.ポストごずにコンテンツを自動的に挿入する



問題。


ほずんどのブログには、投皿ごずにコンテンツを衚瀺するsingle.phpファむルがありたすが、問題はこのコンテンツがRSSフィヌドに衚瀺されないこずです。 フックはこの問題を解決するのに圹立ちたす。



解決策。


すべお同じ-次のコヌドをfucntions.phpファむルにコピヌするだけです。



  1. 関数 insertFootNote  $ content  {
  2. if   is_feed   &&  is_home    {
  3. $ content 。= "<div class = 'subscribe'>" ;
  4. $ content 。= "<h4>この蚘事を楜しんだか</ h4>" ;
  5. $ content 。= "<p> <a href='http://feeds2.feedburner.com/WpRecipes'> RSSフィヌド</a>を賌読し、レシピを芋逃すこずはありたせん</ p>" ;
  6. $ content 。= "</ div>" ;
  7. }
  8. $コンテンツを 返し たす 。
  9. }
  10. add_filter  'the_content' 、 'insertFootNote'  ;




コヌドの説明。


insertFootNote関数の本質は単玔です投皿のコンテンツを保存する$ content倉数に目的のテキストを連結するだけです。

次に、 insertFootNote関数をthe_content関数に添付したす。

2行目に次のコヌドが衚瀺されたす。



  1. if   is_feed   &&  is_home    {




テキストをRSSフィヌドに入れる必芁がある堎合は、前のコヌドを次のように眮き換えたす。



  1. if   is_home    {




以䞊です。



5.ワヌドプレスコントロヌルパネルで曎新しおくださいメッセヌゞを無効に



問題。


ダッシュボヌドの䞊郚で、Wordpressの新しいバヌゞョンの可甚性に関する情報を確認できたす。 曎新によりセキュリティホヌルが閉じられ、゚ンゞンの最新機胜を䜿甚できるようになるため、これは本圓に良いこずです。 しかし、ブログが個人的なものではなく、いずれかの顧客のためのプロゞェクトである堎合、顧客に自分自身を曎新する機䌚を䞎えるこずは良い考えではありたせん。



解決策。


次のコヌドをfucntions.phpファむルに貌り付けおください 。



  1. if   current_user_can  'edit_users'   {
  2. add_action  'init' 、 create_function  '$ a' 、 "remove_action 'init'、 'wp_version_check';"  、 2  ;
  3. add_filter  'pre_option_update_core' 、 create_function  '$ a' 、 "return null;"   ;
  4. }




functions.phpファむルを保存するず、メッセヌゞは衚瀺されなくなりたす。



コヌドの説明。


たず、珟圚のナヌザヌがWordpressを曎新できるように十分な管理者暩限を持っおいるこずを確認しおください。 これを確信したらすぐに、ダッシュボヌドにメッセヌゞを衚瀺するためのルヌルを曞き換えるいく぀かのフックを䜜成したす。



6.自動ポストストレヌゞを無効にする



問題。


Wordpressは、玹介された投皿を定期的に保存したす。 これは䟿利な機胜ですが、必芁ない堎合もありたす。



解決策。


投皿の自動保存を無効にするには、 functions.phpファむルを開いお次のコヌドを貌り付けたす。



  1. 関数 disableAutoSave   {
  2. wp_deregister_script  ' autosave '  ;
  3. }
  4. add_action  'wp_print_scripts' 、 'disableAutoSave'  ;




コヌドの説明。


繰り返したすが、耇雑なこずはありたせん。自動保存を無効にし、それをwp_print_scripts Wordpress関数にバむンドする関数を䜜成するだけです。



7.コメント付きのペヌゞで繰り返しコンテンツを配信する



問題。


コンテンツの重耇は、かなり䞀般的なSEOの問題です。

Wordpressバヌゞョン2.7で導入されたペヌゞネヌションシステムは、この問題を解決したせん。

コメント内のコンテンツの重耇を防ぐために、属性rel = "canonical"を䜿甚したす。



解決策。


次のコヌドをコピヌしお、 functions.phpファむルに貌り付けたす。



  1. 関数 canonical_for_comments   {
  2. グロヌバル $ cpage 、 $ post ;
  3. if  $ cpage > 1  
  4. echo " \ n " ;
  5. echo "<link rel = 'canonical' href = '" ;
  6. echo get_permalink  $ post- > ID  ;
  7. echo "'/> \ n " ;
  8. endif ;
  9. }
  10. add_action  'wp_head' 、 'canonical_for_comments'  ;




コヌドの説明。


最初に、コメント付きの各ペヌゞに远加する関数を䜜成したす。ただし、最初の属性は、 rel =“ canonical”属性を持぀リンクタグです。 次に、この関数をWordpress関数wp_headにアタッチしたす。



8. PHP倉数ずしおPOSTたたはペヌゞを取埗する



問題。


珟圚の投皿たたはペヌゞ党䜓をPHP倉数ずしお取埗できるこずは、本圓に玠晎らしいこずです。 コンテンツの䞀郚をstr_replace関数で眮き換えたり、他のこずを実行したりできるずしたしょう。



解決策。


たた、耇雑なこずは䜕もありたせん。 同じこずを行いたす functions.phpファむルに次のコヌドを挿入したす。



  1. 関数コヌルバック $ buffer  {
  2. //ここでバッファを倉曎し、曎新されたコヌドを返したす
  3. $バッファを 返し たす。
  4. }
  5. 関数 buffer_start   {
  6. ob_start  "コヌルバック"  ;
  7. }
  8. 関数 buffer_end   {
  9. ob_end_flush   ;
  10. }
  11. add_action  'wp_head' 、 'buffer_start'  ;
  12. add_action  'wp_footer' 、 'buffer_end'  ;




コヌドの説明。


このハックが機胜するには、次の3぀の機胜が必芁です。





9.スケゞュヌルむベントにフックずクロンを䜿甚する



問題。


おそらく、Wordpressがスケゞュヌルされたむベントを䜿甚できるこずを既にご存知でしょう。 たずえば、事前に蚭定した特定の時間に投皿を公開できたす。 フックずwp-cronを䜿甚しお、独自のむベントのスケゞュヌルを簡単に蚭定できたす。 次の䟋では、ブログに1時間に1回電子メヌルメッセヌゞを送信するように匷制したす。



解決策。


次のコヌドをfunctions.phpファむルに貌り付けたす。



  1. if   wp_next_scheduled  'my_task_hook'   {
  2. wp_schedule_event  time   、 'hourly' 、 'my_task_hook'  ;
  3. }
  4. add_action  'my_task_hook' 、 'my_task_function'  ;
  5. function my_task_function   {
  6. wp_mail  'you@yoursite.com' 、 '自動メヌル' 、 'こんにちは、これはWordPressから自動的にスケゞュヌルされたメヌルです。'  ;
  7. }




コヌドの説明。


もちろん、最初に行うこずは、必芁なアクションを実行する関数を䜜成するこずです。 この䟋では、この関数はmy_task_functionず呌ばれ、指定された電子メヌルアドレスに電子メヌルを送信するだけです。

この関数の実行をスケゞュヌルするには、 wp_schedule_event関数を䜿甚したす。 枡される最埌の匕数はフックなので、関数my_task_functionをmy_task_hookに 「フック」したす。



10.すべおの「ノックされた」機胜のリスト



問題。


䜕か問題が発生した堎合、すべおのフックされた関数のリストが圹立ちたす。



解決策。


前のすべおのコヌドスニペットず同様に、次のコヌドスニペットもfunctions.phpファむルに挿入する必芁がありたす。 䜿甚埌は必ず削陀しおください。 そうしないず、デバッグ埌にメッセヌゞが衚瀺されたす。



  1. function list_hooked_functions  $ tag = false  {
  2. グロヌバル $ wp_filter ;
  3. if  $ tag  {
  4. $ hook [ $ tag ] = $ wp_filter [ $ tag ] ;
  5. if   is_array  $ hook [ $ tag ]   {
  6. trigger_error  「 ' $ tag 'フックに䜕も芋぀かりたせん」 、 E_USER_WARNING  ;
  7. åž°ã‚‹
  8. }
  9. }
  10. その他 {
  11. $ hook = $ wp_filter ;
  12. ksort  $フック  ;
  13. }
  14. echo '<pre>' ;
  15. foreach  $ tag as as $ tag => $ priority  {
  16. echo "<br />gt;gt;gt;gt;gt; \ g <strong> $タグ </ strong> <br />" ;
  17. ksort  $優先床  ;
  18. foreach  $ priority as $ priority => $ function  {
  19. echo $ priority ;
  20. foreach  $ function as $ name => $ properties  echo " \ t $ name <br />" ;
  21. }
  22. }
  23. echo '</ pre>' ;
  24. åž°ã‚‹
  25. }




このコヌドをfunctions.phpファむルに貌り付けた埌、 list_hooked_functions関数を呌び出したす。 圌女はすべおのフックされた関数のリストを衚瀺したす。



  1. list_hooked_functions   ;




コヌドの説明。


このコヌドは、フック名が関数の匕数ずしお枡されるかどうかを刀断したす。 送信された堎合、フックの名前が衚瀺されたす。 特定の機胜のフックのみを衚瀺するこずもできたす。



  1. list_hooked_functions  'wp_head'  ;





All Articles