web-dev-qa-db-ja.com

ファイルのアップロードデータを処理するために(投稿ではなく)別のカスタムテーブルを使用する

問題:投稿ごとに100枚以上の写真があるウェブサイト。数年以内にposts-tableが100Kエントリを超える可能性があります。

ジレンマ:組み込みの "Add Media"アップローダで画像/ファイルを扱うためのデフォルトのWP UIにずっと従うべきです。可能であれば、別のFile Gallery実装を使用しないでください。

質問:ファイルデータを保存するためにposts_tableから自分のカスタムテーブルにデータを保存することを転用する方法を誰かが見つけましたか? (コアファイルをハックする必要はありません)

7
user28216

おそらく、画像を添付ファイル(別名投稿)として保存することから、親の投稿レベルで保持される配列に保存することに移行する管理可能な方法があるでしょう。私はそれがあなたがどれだけあなたが画像を操作したり、それらを削除したりするのに必要であるかにかかっていると思います。

他のテーブルに移動することは助けになるかもしれませんが、私にはあなたがピーターにポールの支払いを奪っているのかもしれません。確かに大きなテーブルには問題がありますが、それらの行が別の場所にあり、それでも結合などが必要な場合は、どれだけ節約できますか。私はあなたがこのナットをクラックするためにもう少し箱の外に出なければならないかもしれないと思います。

1
Chief Alchemist

私はあなたが本当に別のテーブルに情報を格納したいのであれば、あなたがすることができますが、問題は、箱から出してそれを管理することです。 (アップロードされたばかりのファイルの)画像のURLは異なります。

問題は、内蔵のwordpress uiを使ってメディアをそれ自身のテーブルに入れるには、投稿テーブルに「添付」タイプとして行を作成するメディアアップローダを使用してアップロードしなければならないということです。 。

投稿が削除されたときに他のテーブルから行を削除するには、次のようにします。

add_action('admin_init', 'codex_init');
function codex_init() {
if (current_user_can('delete_posts')):
    // todo: remove records when posts are removed
    add_action('delete_post', 'post_sync', 10);
endif;
}

function post_sync($pid) {
    global $wpdb;
    // no need to check, just delete and watch our for number of records deleted
    return $wpdb->query($wpdb->prepare('DELETE FROM custom_table_name WHERE post_id = %d', $pid));
 }

あなたはここでフックに関するより多くの情報を得ることができるでしょう: http://codex.wordpress.org/Plugin_API/Action_Reference/

0
Terry Kernan

サーバーのphpMyAdminで新しいテーブルを手動で作成できます(明らかに、頻繁に新しいサーバーに移動しないのはサイトです)か、もちろん、テーマのインストールなどでテーブル作成をフックできます。 Wordpress Wordpressデータベース内でクエリを実行するには、オブジェクト/クラス $ wpdb を使用します。 WPデータベース内でクエリを実行する方法を確認できます。だから、私はこのようなものを使用します:

<?php
global $wpdb; // Object must be globalized.

$wpdb->query("
CREATE TABLE IF NOT EXISTS ".$wpdb->prefix."new_table (
    id bigint(20) unsigned NOT NULL AUTO_INCREMENT,
    post_id bigint(20) NOT NULL,
    image_url varchar(250) NOT NULL,
    PRIMARY KEY (id),
    KEY post_id (post_id)
    ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ");
?>

それを関数に入れて、例えば、theme_initにフックしたり、類似したものにしたりできます。好みに応じてフィールドを変更します。別の方法はdbDelta()関数を使用することです。これにはいくつかの特定のルールがあり、そのため使用する正しい理由がわかりません(おそらくいくつかあり、間違っているかもしれません)-あなたはそれについてすべてを見つけることができます こちら (担当者のためにパーマリンクを追加できません、申し訳ありません:D)

テーブルを作成した後、任意の方法で操作できます。その添付ファイルを新しいテーブルに登録することができます。また、添付ファイルを投稿テーブルに配置しないようにする機能をフックすることもできます。列の数が少ないため(たとえば、ポストメタテーブルなど)軽量であるため、そのイメージを操作する際にパフォーマンスを改善する必要があると思います。

0
ceruleus