Est-ce une mauvaise pratique de créer sa propre table pour un plugin?

10

Si je veux enregistrer les paramètres de mon plugin, c'est très simple et rapide.

J'aimerais maintenant enregistrer un peu plus dans la base de données.

Un nom de fichier et 3 autres valeurs qui ne s'appliquent qu'à ce fichier. Et il y a beaucoup de fichiers avec ces valeurs. Est-il possible de sauvegarder des types de sous-réseaux en utilisant des méthodes de base de données intégrées? Comment puis-je les supprimer et les trier, etc.?

    
posée Badr Hari 01.06.2012 - 12:50

5 réponses

12

Je suis rarement en désaccord avec des utilisateurs avertis, mais dans ce cas, je ne peux pas m'en empêcher. À mon avis, appeler l'utilisation de tables de base de données non principales une mauvaise pratique en soi est tout simplement une erreur.

Le choix d'utiliser des tables principales ou d'ajouter les vôtres dépend de plusieurs facteurs.

Le temps d'exécution d'une requête dépend de la taille de la table. Par conséquent, si vous envisagez de stocker des quantités importantes de données, une solution distincte prenant uniquement en compte ce type de jeu de données spécifique sera inévitablement la solution la plus efficace.

Si vous stockez un grand nombre de publications régulières ou de CPT avec ces ensembles de données spécifiques, wp_posts ainsi que wp_postmeta peuvent se développer rapidement.

Pour moi, ce choix dépend en fin de compte de la "posty" des données. Devrait-il soutenir un auteur, des commentaires, des révisions, des extraits ou similaires? Si tel est le cas, je choisirai les CPT et / ou les fonctionnalités principales. Sinon, je choisirai des tableaux distincts pour des raisons d’utilisation et d’efficacité des ressources.

Si la notion d'Eugene était correcte, aucun des plugins existants bien écrit n'ajouterait ses propres tables, ce qui n'est heureusement pas le cas.

    
réponse donnée Johannes Pille 01.06.2012 - 13:30
5

L'utilisation de tables de base de données de base WP est la meilleure pratique

  1. L'utilisation de tables de base de données principales rend vos données plus portables et plus faciles à sauvegarder, car elles seront gérées par l'exportateur / importateur principal, ainsi que par la myriade de plugins de sauvegarde
  2. L'utilisation de tables de base de données principales simplifie et sécurise la manipulation de vos données , car vous aurez un accès plus intuitif aux différentes fonctions principales de WordPress relatives à l'interrogation, l'ajout, la modification, la suppression et la désinfection des données de la base de données, notamment via: le très puissant $wpdb class .
  3. L'utilisation de tables de base de données principales encourage / facilite les meilleures pratiques en matière de classification et de stockage des données , telles que le stockage des options de plug-in sous forme de tableau dans une seule ligne dans wp_options et en obligeant le développeur du plug-in à examiner attentivement le type. des données créées / stockées - s'agit-il d'un CPT? est-ce une taxonomie? est-ce post meta?
  4. Votre plugin est moins susceptible de laisser des traces lorsque vous utilisez des tables de base de données DB.

WordPress permet aux plug-ins d’ajouter des tables à sa base de données

Toutefois, dans les cas où une table de base de données distincte est nécessaire, veillez à utiliser la méthode fournie par WordPress pour l'ajout de votre table personnalisée. la base de données WordPress , afin que vous puissiez tirer parti de la puissante classe $wpdb . Notez les informations / mises en garde répertoriées dans les entrées du Codex:

  
  • Informations de configuration : les choix de l'utilisateur qui sont entrés lors de la première configuration de votre plug-in par l'utilisateur, et qui ont tendance à ne pas aller au-delà (par exemple, dans le cadre d'une balise plugin, les choix de l’utilisateur concernant le format du nuage de tags dans la barre latérale). Les informations de configuration seront généralement stockées à l'aide du mécanisme d'options de WordPress.

  •   
  • Données : les informations ajoutées au fur et à mesure que l'utilisateur continue d'utiliser votre plug-in, qui sont généralement des informations développées relatives aux publications, aux catégories, aux téléchargements et à d'autres composants WordPress (par exemple, dans un plug-in lié aux statistiques, les différentes vues de page, référents et autres statistiques associées à chaque publication de votre site). Les données peuvent être stockées dans une table MySQL distincte, qui devra être créée. Avant de vous lancer dans une nouvelle table, demandez-vous si le stockage des données de votre plugin dans Post Meta (a.k.a. Custom Fields) de WordPress fonctionnerait. Post Meta est la méthode préférée. utilisez-le lorsque cela est possible / pratique.

  •   

Nous pouvons donc conclure ce qui suit:

  1. Le stockage de données (de configuration ou générées par l'utilisateur) dans des tables WP principales constitue la meilleure pratique .
  2. Il existe des cas d'utilisation valides pour la création de tables de base de données personnalisées. par conséquent, la création de tables de base de données personnalisées ne peut pas être considérée comme une mauvaise pratique inhérente
  3. Lors de la création de tables de base de données personnalisées, WordPress fournit une implémentation conforme aux meilleures pratiques
réponse donnée Chip Bennett 01.06.2012 - 14:12
1

Les tables de base de données non essentielles sont indispensables si vos données sont plus complexes que le post-modèle WordPress, elles seront énormes et comporteront de nombreuses méta-détails qui feront l'objet d'une recherche.

Le format EAV que WordPress utilise pour ses posts méta ne se prête pas bien à la recherche multicritère.

Si vous divisez votre méta en plusieurs entrées, vous obtiendrez de nombreuses entrées par publication dans le tableau des méta-publications, et la recherche de tout message via des méta sera beaucoup plus lente.

Si vous stockez toutes les méta sérialisées dans un tableau et que vous ne l'avez qu'une seule entrée dans post méta, cette fois, vous serez obligé de ne faire que des recherches de texte à l'intérieur de cette méta et vous ne pourrez pas utiliser d'opérateurs de comparaison directement dans votre répertoire. requête SQL.

Ce n’est pas un gros problème si votre plugin n’aura pas des milliers d’entrées et des méta associés.

Mais un problème majeur si votre plugin va faire quelque chose de grand.

Votre situation, un nom de fichier en tant qu'entrée indépendante et 3 entrées de métadonnées attachées à cette entrée ne semblent pas si grandes. Vous pouvez utiliser wordpress post table et meta table pour cela.

MAIS, si les gens recherchent beaucoup ces 3 métas, surtout conjointement, je vous recommande de configurer des tables séparées.

Avec ce format, un seul tableau avec une seule entrée, contenant également tous les métas serait acceptable, et interrogerait rapidement la foudre.

Incidemment, si vous utilisez des tables WordPress et que vous utilisez également la mise en cache des requêtes, l’utilisateur cherchant vos données sera mis en cache avec le temps et subira moins de charge. Mais cela ne serait pas aussi prudent que de faire des tables séparées.

    
réponse donnée unity100 22.01.2016 - 00:43
0

Vous pouvez télécharger vos fichiers dans la médiathèque. Chaque élément de la bibliothèque multimédia est stocké dans la table wp_posts . Cela signifie que chaque fichier peut avoir des métadonnées. Vous pouvez enregistrer autant d'informations que nécessaire par fichier dans la table wp_postmeta en utilisant API de métadonnées .

  

Est-ce une mauvaise pratique de créer sa propre table pour un plugin?

Oui, il est déconseillé de créer votre propre table, si vous pouvez utiliser les fonctionnalités principales à la place.

    
réponse donnée Eugene Manuilov 01.06.2012 - 13:02
0
class TMM {

    public static $options;

    public static function register() {
        self::$options = get_option(TMM_THEME_PREFIX . 'theme_options');
    }

    public static function get_option($option) {
        return @self::$options[$option];
    }

    public static function update_option($option, $data) {
        self::$options[$option] = $data;
        update_option($prefix . 'theme_options', self::$options);
    }

    //ajax
    public static function change_options() {

        $action_type = $_REQUEST['type'];
        $data = array();
        parse_str($_REQUEST['values'], $data);
        $data = self::db_quotes_shield($data);

        if (!empty($data)) {
            foreach ($data as $option => $newvalue) {
                if (is_array($newvalue)) {
                    self::update_option($option, $newvalue);
                } else {
                    $newvalue = stripcslashes($newvalue);
                    $newvalue = str_replace('\"', '"', $newvalue);
                    $newvalue = str_replace("\'", "'", $newvalue);
                    self::update_option($option, $newvalue);
                }
            }
        }
        _e('Options have been updated.', TMM_THEME_FOLDER_NAME);
        exit;
    }

    public static function db_quotes_shield($data) {
        if (is_array($data)) {
            foreach ($data as $key => $value) {
                if (is_array($value)) {
                    $data[$key] = self::db_quotes_shield($value);
                } else {
                    $value = stripslashes($value);
                    $value = str_replace('\"', '"', $value);
                    $value = str_replace("\'", "'", $value);
                    $data[$key] = $value;
                }
            }
        }

        return $data;
    }

}
  • Le nom de la classe est original, renommez-le comme vous le souhaitez.
  • Dans les fonctions php add: add_action ('init', array ('TMM', 'register'), 1);
  • Et ajoutez pour ajax: add_action ('wp_ajax_change_options', array ('TMM', 'change_options'));;
  • Pour obtenir les options dont vous avez besoin, utilisez ceci (par exemple): $ logo_img = TMM :: get_option ('logo_img');
  • Utilisez-le pour enregistrer vos options par les méthodes wordpress natives
réponse donnée realmag777 07.06.2013 - 17:12

Lire d'autres questions sur les étiquettes