我不太确定你哪里有问题。添加和删除挂钩是WordPress编程的基础。一旦你了解了钩子系统,你会有一个更容易的时间。
什么是挂钩
您需要的一切都可以在
Plugin API/Hooks. WordPress有两种类型的钩子:动作和过滤器,但它们基本相同。过滤器只需要返回一个可能修改过的变量。
什么是apply_filters()
, 和add_filter()
?假设我们有一个函数f()
. 我们的函数执行一些有用的操作并返回一个值。但我们希望允许其他开发人员可能修改该值。所以我们打电话apply_filters()
我们的价值观。apply_filters()
需要两个参数:第一个$tag
是字符串和第二个$value
可以是任何东西。
然后,其他开发人员或您可以使用add_filter()
函数修改该值。add_filter()
需要两个参数,两个参数是可选的。第一个是$tag
. 这与上面使用的标签相同。第二个是callable
: 这可以是一个简单的回调(字符串)、静态类调用、对象类调用等。请参阅PHP可调用链接。第三个(可选)参数是钩子应该触发的优先级(先触发较小的数字),第四个参数是将传递给函数的变量数。
那太好了。还有别的吗
是的。确保在
apply_filters()
呼叫如果你不这样做,他们就不会被应用。要做到这一点,最简单的方法是知道何时挂钩和优先级
apply_filters()
然后确保
add_filter()
(或过滤器)在挂钩之前。
你能举个例子吗
给你。
<?php
/**
* Plugin Name: WPSE 257530
* Description: WordPress StackExchange question 257530
* Plugin URI: https://wordpress.stackexchange.com/questions/257530/
* Author: Nathan Johnson
* Licence: GPL2+
* Licence URI: https://www.gnu.org/licenses/gpl-2.0.en.html
*/
//* Don\'t access this file directly
defined( \'ABSPATH\' ) or die();
if( ! class_exists( \'wpse_257530\' ) ):
class wpse_257530 {
protected $bulk_actions;
public function plugins_loaded() {
//* Add default actions at priority 0
add_filter( \'wpse-257530-bulk-actions\', [ $this, \'default_bulk_actions\' ], 0, 1 );
//* Add filter to a non-static method in the same class
add_filter( \'wpse-257530-bulk-actions\', [ $this, \'move\' ], 10, 1 );
//* Do something on init
add_action( \'init\', [ $this, \'init\' ] );
}
public function init() {
//* Get the bulk actions
$this->bulk_actions = $this->get_bulk_actions();
//wp_die( var_dump( $this->bulk_actions ) );
}
public function default_bulk_actions( $actions ) {
return [
\'create\' => __( \'Create\', \'wpse-257530\' ),
\'rename\' => __( \'Rename\', \'wpse-257530\' ),
\'update\' => __( \'Update\', \'wpse-257530\' ),
\'delete\' => __( \'Delete\', \'wpse-257530\' ),
];
}
public function get_bulk_actions() {
return apply_filters( \'wpse-257530-bulk-actions\', [] );
}
public function move( $actions ) {
$actions[ \'move\' ] = __( \'Move\', \'wpse-257530\' );
return $actions;
}
public static function slip( $actions ) {
$actions[ \'slip\' ] = __( \'Slip\', \'wpse-257530\' );
return $actions;
}
public function slide( $actions ) {
$actions[ \'slide\' ] = __( \'Slide\', \'wpse-257530\' );
return $actions;
}
}
//* Start the plugin on plugins_loaded
add_action( \'plugins_loaded\', [ new wpse_257530(), \'plugins_loaded\' ] );
//* Add filter to a non-static method in another class
add_filter( \'wpse-257530-bulk-actions\', [ new wpse_257530(), \'slide\' ], 20, 1 );
//* Add filter to a static method
add_filter( \'wpse-257530-bulk-actions\', [ \'wpse_257530\', \'slip\' ], 10, 1 );
//* Add filter to a closure
add_filter( \'wpse-257530-bulk-actions\', function( $actions ) {
$actions[ \'water\' ] = __( \'Water\', \'wpse-257530\' );
return $actions;
}, 10, 1 );
endif;