web-dev-qa-db-ja.com

別のワードプレスプラグイン用のワードプレスプラグインを作成する方法?

私はいつもクライアント用のWordpressプラグインを変更しています。しかし、これらの変更はプラグインが更新されると失われる危険性が常にあります。

Wordpressで他のプラグイン用にプラグインを作成する方法はありますか?各プラグインの更新後に変更を保存するか、またはそれを再適用する方法はありますか。

6
alhoseany

WordPressコア自体を拡張するように、これを実行する最善の方法はアクションとフィルターを使用することです。

他のオプションは@helgathevikingが指摘したようなもので、プラグインがクラスならそれを拡張できます。

残念ながら、すべてのプラグイン開発者がコードを使って便利なフィルタやアクションを提供するわけではありません。ほとんどの場合、プラグインはOOPのように書かれていません。プラグインの更新に関する変更を保存する唯一の方法は、オリジナルのプラグインのコピーを作成し、プラグイン名を変更することです。私は通常オリジナルの名前を頭につけます。 Mamaduka Twitter Connectですが、この解決策ではオリジナルのプラグインのコードを手動で更新する必要があります。

プラグインがもっとフィルタ/アクションを必要とすると思うなら、あなたは作者に連絡してコアにそれらのフックを含めるように頼むことができます。

4
Mamaduka

簡単な方法の1つは、プラグイン内でフックできるカスタムフックを定義することです。内蔵のフックシステムを使用すると、独自のフックを作成して、通常のWordpressのフックのようにそれらにバインドすることができます。 Wordpress Codex にはdo_action関数の素晴らしい例と説明、そしてそれを使ってカスタムフックを作成する方法があります。プラグインとテーマ開発者によってWordpressの真剣に見過ごされている機能。

私は、フックシステムが他のプラグインによって拡張されることができるプラグインを開発するためにあなたが必要とするすべてであると確信しています、しかし私がすべてのWordpress開発者の90%によって見過ごされました。

(提供されているWordpress Codexリンクから取得した)例については、以下を参照してください。

<?php 
# ======= Somewhere in a (mu-)plugin, theme or the core ======= #

/**
 * You can have as many arguments as you want,
 * but your callback function and the add_action call need to agree in number of arguments.
 * Note: `add_action` above has 2 and 'i_am_hook' accepts 2. 
 * You will find action hooks like these in a lot of themes & plugins and in many place @core
 * @see: http://codex.wordpress.org/Plugin_API/Action_Reference
 */

// Define the arguments for the action hook
$a = array(
     'eye patch' => 'yes'
    ,'parrot' => true
    ,'wooden leg' => (int) 1
);
$b = 'And hook said: "I ate ice cream with peter pan."'; 

// Defines the action hook named 'i_am_hook'
do_action( 'i_am_hook', $a, $b );

# ======= inside for eg. your functions.php file ======= #

/**
 * Define callback function
 * Inside this function you can do whatever you can imagine
 * with the variables that are loaded in the do_action() call above.
 */
function who_is_hook( $a, $b )
{
    echo '<code>';
        print_r( $a ); // `print_r` the array data inside the 1st argument
    echo '</code>';

    echo '<br />'.$b; // echo linebreak and value of 2nd argument
} 
// then add it to the action hook, matching the defined number (2) of arguments in do_action
// see [http://codex.wordpress.org/Function_Reference/add_action] in the Codex 

// add_action( $tag, $function_to_add, $priority, $accepted_args );
add_action( 'i_am_hook', 'who_is_hook', 10, 2 );  

# ======= output that you see in the browser ======= #

Array ( 
    ['eye patch'] => 'yes'
    ['parrot'] => true
    ['wooden leg'] => 1
) 
And hook said: "I ate ice cream with peter pan."
3

確かに、自動更新されないようにプラグインのバージョン番号を増やすことができます。それは最善の解決策ではありませんが、それは当面の問題を解決します。名前とファイル名を変更して、それらが「同じ」プラグインではなくなるようにすることもできます。

1
Norcross