v23 fredag – Hur du använder WordPress hooks med Klassmetoder

Du kan använda alla WordPress hooks med klassmetoder genom att skicka in en array istället för ett funktionsnamn som parameter 2. Bortset från activation och uninstall hooks, kan alla hooks ta emot en klassinstans och ett metodnamn. Activation och uninstall hooks stödjer endast statiska klassmetoder.

add_action()

public function __construct() {
  // setup wp_ajax_ action
  add_action('wp_ajax_'.$this->ajax_action, array($this, 'controller'));
}

add_filter()

public function __construct() {
  // setup our filter callback
  add_filter('the_content', array($this, 'the_content'));
}

Du kan endast lägga till publika klassmetoder som callback för en action eller filter.

Activation & Uninstall hooks.

register_activation_hook() och register_uninstall_hook() beter sig lite annorlunda då de inte kan ta emot instanser av en klass, endast statiska metoder. Detta betyder delvis att vi måste skriva annorlunda syntax inuti våra metoder, och även att arrayen vi skickar till hooken ser lite annorlunda ut.

public function __construct($activation = true) {
  // register hooks recieves array(CLASS_NAME, STATIC_METHOD_NAME)
  register_activation_hook(PLUGIN_PATH, array('CLASS_NAME', 'activate'));
  register_uninstall_hook(PLUGIN_PATH, array('CLASS_NAME', 'uninstall'));
}

Den största skillnaden är att statiska metoder inte har tillgång till $this, istället endast statiska egenskaper som finns på klassen.

// Plugin uninstall HOOK
public static function uninstall() {
  // need to setup wpdb here, as it is not available in __construct()
  UFODB::setup_wpdb();
  // drops the user favourites table if it exists
  $table_name = UFODB::$table_name;
  $sql = "DROP TABLE IF EXISTS $table_name;";
  UFODB::$wpdb->query($sql);
}

Läs mer om OOP WordPress Plugins

0 votes