wake-up-neo.com

Sollte ich globales $ wpdb außerhalb des Funktionsumfangs meines Plugins verwenden?

Ich weiß, dass der allgemeine Ratschlag für globale Variablen ist, sie überhaupt nicht zu verwenden. Wenn Sie jedoch etwas mit der Wordpress-Datenbank tun, müssen Sie global $wpdb; ausführen, um auf die Methoden zuzugreifen, die Wordpress für die Interaktion mit der Datenbank bereitstellt.

Jetzt habe ich ein kleines Plugin geschrieben, das verschiedene Funktionen einführt, die für die Interaktion mit der Wordpress-Datenbank erforderlich sind. Das bedeutet, dass ich in jeder Funktion global $wpdb; geschrieben habe. Danach erstelle ich dynamisch die benötigten Tabellennamen: $wpdb->prefix . 'my_table_name';.

Dies ist meiner Meinung nach viel redundanter Code, der sogar viel mehr Arbeit produzieren kann. Zum Beispiel habe ich die Tabellennamen ein paar Mal während der Entwicklung geändert und musste sie in jeder Funktion meines Plugins ändern, wo ich $wpdb->prefix . 'my_table_name'; mache.

Nun ist meine Frage: Ist es eine gute Idee, nur global$wpdb außerhalb eines Funktionsumfangs zu speichern und die Tabellennamen dann globalen Variablen zuzuweisen?
Auf diese Weise wäre alles viel flexibler in Bezug auf Tabellennamen (und vielleicht sogar Leistung?)

2
Sven

Eine bequeme Möglichkeit, $wpdb in Plugins mit benutzerdefinierten Tabellen und Funktionen zu verwenden, besteht darin, eine Klasse oder mehrere Funktionen zu schreiben, die das WP-Objekt abrufen und konfigurieren.

Ein Beispiel:

/* Return global wpdb aready setup with custom tables */
my_plugin_get_db( wpdb $wpdb = NULL ) {
  static $db;
  if ( is_null($db) || ! is_null( $wpdb ) ) {
    $db = is_null($wpdb) ? $GLOBALS['wpdb'] : $wpdb;
  }
  return $db;
}

/* Setup database saving $wpdb custom table names insie wpdb object */
my_plugin_set_db() {
  global $wpdb;
  /* define here your custom table names */
  $my_tables = array(
    'my_table_1', 'my_table_1', 'my_table_1'
  );
  foreach ( $my_tables as $table ) {
     $wpdb->$table = $wpdb->prefix . $table;
  }
  my_plugin_get_db( $wpdb );
}

add_action( 'plugins_loaded', 'my_plugin_set_db' );

/* Multisite compatibility? */
if ( is_multisite() ) {
    add_action( 'switch_blog', 'my_plugin_set_db' );
}

Danach können Sie, wo immer in Ihrem Plugin Sie können

$db = my_plugin_get_db();
$query = $db->query( "SELECT * FROM $db->my_table_1" );  
5
gmazzap

Das Globalisieren von in WordPress definierten Variablen ist nicht dasselbe wie das Erstellen eigener globaler Variablen. Bei Ersterem haben Sie keine Wahl, bei Letzterem können Sie wählen, ob Sie dies vermeiden möchten. Schließen Sie Ihre Funktionen in eine Klasse ein und definieren Sie Ihren Tabellennamen als Member-Var. Auf diese Weise können Sie es an einer Stelle definieren und außerhalb des globalen Bereichs aufbewahren.

2
Milo