web-dev-qa-db-ja.com

管理AJAXフックを内蔵?

私はプラグインを開発していて、通常のフックとフィルタを使っています。しかし、私は今、自分の関数をWPのadmin ajax呼び出しからの応答にバインドしようとしています。

たとえば、 Plugins Add New画面で プラグインのajaxインストールが正常に完了し、[Activate]ボタンが表示された後に自分の機能を実行したいと思います。 ajaxの応答が成功したときに自分の関数をトリガーするにはどうすればよいですか?

"plugin_install_action_links"を使えばphpを通してアクションリンクを制御できますが、ajaxと同等のものはありますか(ある場合)。

2
EranG

WordPressコアはあなた自身のフックを作成することができないところです。 WordPressのフックはこれらで作成されます

apply_filters
apply_filters_ref_array
apply_filters_deprecated
do_action
do_action_ref_array
do_action_deprecated

あなたができる唯一のことはあなたの機能をあるWordPressコアフックに登録することです。しかし、これらのフックはどこにありますか?

あなたはactivate_pluginと呼ばれる関数でこれらのフックを期待するかもしれません。

File: wp-admin/includes/plugin.php
512: /**
513:  * Attempts activation of plugin in a "sandbox" and redirects on success.
514:  *
515:  * A plugin that is already activated will not attempt to be activated again.
516:  *
517:  * The way it works is by setting the redirection to the error before trying to
518:  * include the plugin file. If the plugin fails, then the redirection will not
519:  * be overwritten with the success message. Also, the options will not be
520:  * updated and the activation hook will not be called on plugin error.
521:  *
522:  * It should be noted that in no way the below code will actually prevent errors
523:  * within the file. The code should not be used elsewhere to replicate the
524:  * "sandbox", which uses redirection to work.
525:  * {@source 13 1}
526:  *
527:  * If any errors are found or text is outputted, then it will be captured to
528:  * ensure that the success redirection will update the error redirection.
529:  *
530:  * @since 2.5.0
531:  *
532:  * @param string $plugin       Plugin path to main plugin file with plugin data.
533:  * @param string $redirect     Optional. URL to redirect to.
534:  * @param bool   $network_wide Optional. Whether to enable the plugin for all sites in the network
535:  *                             or just the current site. Multisite only. Default false.
536:  * @param bool   $silent       Optional. Whether to prevent calling activation hooks. Default false.
537:  * @return WP_Error|null WP_Error on invalid file or null on success.
538:  */
539: function activate_plugin( $plugin, $redirect = '', $network_wide = false, $silent = false ) {

prevent起動フックを呼び出すためのオプションのパラメータ@param bool $silentがあります。デフォルトではfalseに設定されています。

現時点でその関数では、フックを見つけることができます:

File: wp-admin/includes/plugin.php
563:        if ( ! $silent ) {
564:            /**
565:             * Fires before a plugin is activated.
566:             *
567:             * If a plugin is silently activated (such as during an update),
568:             * this hook does not fire.
569:             *
570:             * @since 2.9.0
571:             *
572:             * @param string $plugin       Plugin path to main plugin file with plugin data.
573:             * @param bool   $network_wide Whether to enable the plugin for all sites in the network
574:             *                             or just the current site. Multisite only. Default is false.
575:             */
576:            do_action( 'activate_plugin', $plugin, $network_wide );

もう一つ….

File: wp-admin/includes/plugin.php
563:        if ( ! $silent ) {
...
578:            /**
579:             * Fires as a specific plugin is being activated.
580:             *
581:             * This hook is the "activation" hook used internally by register_activation_hook().
582:             * The dynamic portion of the hook name, `$plugin`, refers to the plugin basename.
583:             *
584:             * If a plugin is silently activated (such as during an update), this hook does not fire.
585:             *
586:             * @since 2.0.0
587:             *
588:             * @param bool $network_wide Whether to enable the plugin for all sites in the network
589:             *                           or just the current site. Multisite only. Default is false.
590:             */
591:            do_action( "activate_{$plugin}", $network_wide );

そして、あなたが実際に必要なものは...

File: wp-admin/includes/plugin.php
605:        if ( ! $silent ) {
606:            /**
607:             * Fires after a plugin has been activated.
608:             *
609:             * If a plugin is silently activated (such as during an update),
610:             * this hook does not fire.
611:             *
612:             * @since 2.9.0
613:             *
614:             * @param string $plugin       Plugin path to main plugin file with plugin data.
615:             * @param bool   $network_wide Whether to enable the plugin for all sites in the network
616:             *                             or just the current site. Multisite only. Default is false.
617:             */
618:            do_action( 'activated_plugin', $plugin, $network_wide );

私はちょうどdo_actionのようなフックジェネレータ関数を探しました。


plugin_install_action_linksfilerフックタイプです。フィルタは通常、特定のものをreplaceするためにあります。

File: wp-admin/includes/class-wp-plugin-install-list-table.php
519:            /**
520:             * Filters the install action links for a plugin.
521:             *
522:             * @since 2.7.0
523:             *
524:             * @param array $action_links An array of plugin action hyperlinks. Defaults are links to Details and Install Now.
525:             * @param array $plugin       The plugin currently being listed.
526:             */
527:            $action_links = apply_filters( 'plugin_install_action_links', $action_links, $plugin );

"plugin_install_action_links"を使うことでphpを通してアクションリンクをコントロールできますが、ajaxと同等のものはありますか?

admin-ajax.phpというファイルがあります。あなたはこのファイルを調べることができます、そしてあなたはあなたの特定のことをするためにフックを使うことができますが、現時点でadmin-ajax.phpで定義されたフィルタはありません。

2
prosti