Est-il obligatoire d'utiliser le préfixe $ wpdb dans les tables personnalisées

13

Désolé si cette question est triviale. Je commence tout juste à développer des plugins dans WordPress.

Dans tous les tutoriels, j'ai trouvé ceci: lors de la création des tables personnalisées, $wpdb->prefix est utilisé.

Exemple:

$table_name = $wpdb->prefix . "liveshoutbox";

Ma question:

  

Est-il obligatoire d'utiliser $wpdb->prefix ? Que se passe-t-il si je n'utilise pas de préfixe pour mes tables personnalisées?

    
posée newbie 31.05.2015 - 10:49

2 réponses

19

C’est obligatoire, bien que cela ne soit pas appliqué.

Prenons le cas où deux sites Wordpress ont été configurés dans la même base de données. Un avec le préfixe wp_ et un autre avec wp2_ . Si vous installez votre plug-in sur les deux sites avec le préfixe, les tables créées seront wp_liveshoutbox pour le premier site et wp2_liveshoutbox pour le deuxième site. Mais si vous omettez le préfixe, les deux sites utiliseront la même table nommée liveshoutbox et le tout se brisera.

    
réponse donnée sakibmoon 31.05.2015 - 10:58
4

Considérez ce qui suit:

Votre plugin est utilisé sur un réseau wordpress, qui utilise différents préfixes de table pour chaque site. Votre plugin pourrait fonctionner simultanément sur 836 sites différents, tous dans la même base de données. wp_385677_liveshoutbox est un nom de table parfaitement raisonnable.

Votre plug-in est installé par un utilisateur qui a une notion de sécurité et qui a changé le préfixe de la table pour bloquer les bots qui tentent d'injecter select * from wp_users dans le système. Même s'ils trouvent une nouvelle vulnérabilité, cela ne fonctionnera pas.

Utiliser des raccourcis tels que les noms de table de codage en dur est un bon moyen de rendre un produit opérationnel, mais pas un bon moyen de le publier. dans très peu de temps, le plugin aura une pile de commentaires "ne fonctionne pas", dans le pire des cas, vous allez casser le site de quelqu'un d'autre.

Si j'ai une requête complexe et que je ne veux pas m'occuper de la peine d'écrire 'select foo from ' . $wpdb->prefix . '_mytable left join ' . $wpdb->prefix . '_mytablemeta on ' . $wpdb->prefix . '.ID = ' . $wpdb->prefix . '.meta_id .... , vous pouvez utiliser des substituts. Par exemple:

$query = 'select foo from %table% left join %meta% on %table%.ID = %meta%.meta_id ... ';

$change = array (
    '%table%' => $wpdb->prefix . '_mytable',
    '%meta%'  => $wpdb->prefix . '_mytablemeta'
    );


$sql = str_replace( array_keys( $change ), array_values( $change ), $query );

$results = $wpdb->get_results( $sql );

Wordpress change constamment. Ce qui "fonctionne" aujourd'hui peut ne pas fonctionner demain. C'est pourquoi il existe des fonctions API. Les développeurs de Wordpress s'assureront que le comportement de l'API publique est cohérent (ou déprécieront la fonction). Si vous commencez à utiliser des appels de méthode internes parce que c'est «plus rapide ainsi», il reviendra généralement vous mordre. Il existe très peu de véritables raccourcis dans les logiciels: ils déplacent simplement le travail requis de maintenant à plus tard et, comme votre carte de crédit, "plus tard" coûte généralement plus cher.

    
réponse donnée paul 31.05.2015 - 15:48

Lire d'autres questions sur les étiquettes