web-dev-qa-db-fra.com

Comment ajouter/modifier une valeur de la propriété $ wpdb/var?

Il y a un problème: je veux ajouter une table 'linkmeta' pour fonctionner comme 'postmeta' ou 'commentmeta' .. et utiliser des fonctions comme add_metadata/ update_metadata /delete_metadata!

mais, dans cette fonction, appelez "_get_meta_table ()" pour vérifier le nom dans la base de données, ce code:

function _get_meta_table($type) {
    global $wpdb;
    $table_name = $type . 'meta';
    if ( empty($wpdb->$table_name) )
        return false;
    return $wpdb->$table_name;
}

donc, s'il n'existe pas la propriété/var nommée 'linkmeta' dans $ wpdb, _get_meta_table retournera false, alors update_metadata ne fonctionnera pas non plus, car cette partie de code au début de celle-ci:

if ( ! $table = _get_meta_table($meta_type) )
    return false;

mais, si je peux définir une propriété/var de (classe) $wpdb comme $wpdb->linkmeta, renvoyer le nom correct de la table, dans ce cas (par défaut) wp_linkmeta, tout le reste fonctionnera Nice!

oui, il y a un moyen de changer wpdb dans le runtime? si je viens de mettre les commandes:

$wpdb->tables = array_merge($wpdb->tables, array('linkmeta'));
$wpdb->linkmeta = $wpdb->prefix . 'linkmeta';

lors de l’initialisation du plugin, cela fonctionnera-t-il lorsque la fonction _get_meta_table sera appelée ??!

rgds

2
Matheus Eduardo

Oui, il suffit de déclarer suffisamment tôt le $wpdb global et de modifier ses champs. La documentation du Codex pour add_metadata() dit exactement cela:

Notez que vous devrez également enregistrer la table avec l'objet $ wpdb pour que cela fonctionne. Ajoutez simplement ce qui suit au crochet d’initialisation de WordPress (ou du moins avant d’essayer d’utiliser une fonction de métadonnée personnalisée).

global $wpdb;
$wpdb->termmeta = $wpdb->prefix.'termmeta';
2
Rarst