問題があります。テーブル '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
うん、グローバル$wpdb
を十分に早く宣言してそのフィールドを変更するだけです。 add_metadata()
のコーデックスドキュメントは、まさにそのことを言っています。
テーブルを機能させるには、$ wpdbオブジェクトを使用してテーブルを登録する必要もあります。 WordPressのinitフックに以下を追加するだけです(または少なくともカスタムメタデータ関数を使用しようとする前に)。
global $wpdb; $wpdb->termmeta = $wpdb->prefix.'termmeta';