web-dev-qa-db-ja.com

$ wpdb property/varの値を追加/変更するにはどうすればいいですか?

問題があります。テーブル 'linkmeta'を追加して 'postmeta'または 'commentmeta'のように機能させ、add_metadata / update_metadata / delete_metadataのような関数を使用します。

しかし、この関数では "_get_meta_table()"を呼び出してdbの名前を確認します。

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

そのため、$ wpdbに 'linkmeta'という名前のプロパティ/ varが存在しない場合、_get_meta_tableはfalseを返します。その後、update_metadataも機能しません。

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

しかし、$wpdbのように(class)$wpdb->linkmetaのプロパティ/ varを設定することができれば、正しいテーブル名を返すことになります。この場合(デフォルト)wp_linkmetaなら、残りはすべてうまくいきます。

だから、ランタイムにwpdbを変更する方法はありますか?コマンドを入力しただけの場合

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

プラグインの初期化時に、関数_get_meta_tableが呼び出されたときに動作しますか。

rgds

2
Matheus Eduardo

うん、グローバル$wpdbを十分に早く宣言してそのフィールドを変更するだけです。 add_metadata() のコーデックスドキュメントは、まさにそのことを言っています。

テーブルを機能させるには、$ wpdbオブジェクトを使用してテーブルを登録する必要もあります。 WordPressのinitフックに以下を追加するだけです(または少なくともカスタムメタデータ関数を使用しようとする前に)。

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