前書き。
上記のスクリーンショットでは、プレミアムプラグインReal Media Libraryで構築されたフォルダー構造を見ることができます。次に、フォルダ構造を物理的なフォルダ構造に整理できる拡張プラグインを作成します-RMLは視覚的な構造にすぎません。
アップデート#2(2017-01-27):答えをチェックしてください!
見ていWordPressのメディアライブラリの物理的な組織(リアルタイムメディアライブラリプラグイン)私は自由な拡張プラグインを作成しました。
更新#1(2016-12-14):最初の成功:カスタムサムネイルアップロードフォルダー
ここで、別のプラグインReal Thumbnail Generatorを作成しました。これにより、カスタムサムネイルアップロードフォルダーを作成できます。このスクリーンショットをご覧ください:
カスタムサムネイルフォルダーを使用する理由 カスタムサムネイルフォルダーは、サムネイルがまだ同じ場所にあるため、データベースの更新URLを維持する必要がないため(RML拡張機能によって変更されないため)、維持が容易です。
カスタムサムネイルジェネレーターの詳細については、このスレッドをご覧ください。技術的なアプローチについて説明しました。カスタムアップロードディレクトリの各カスタムイメージサイズは?。
2017年の初めからRMLとサーバーアップロードフォルダー間の同期を可能にするRML拡張機能の開発を継続するため、このスレッドを続けてください。拡張機能はReal Thumbnail Generatorプラグインとも互換性があるため、データベースが更新されるはずです。
元の投稿
私の拡張目標。
現時点では、フォルダ「/ Unorganized」にいます。つまり、フォルダ/ wp-content / uploads /です。(スクリーンショットでわかるように)ファイルをPDFs / SubDirフォルダーに移動すると、ファイルはvisualフォルダーにあります。これで、私の拡張機能は物理フォルダーとは異なるフォルダーを検出し、ユーザーが物理的に移動できる小さな「ボタン」を表示します。
ユーザーは「Physix it!」ボタンをクリックします。ファイルを/wp-content/uploads/pdfs/subdir/Another-Doc.pdfに移動する必要があります。既に移動プロセスを作成しました。この添付ファイルのすべてのメディアファイル(画像のサムネイルを含む)を読み取り、php関数rename($ old_file、$ new_file)をWP関数wp_mkdir_p()と共に使用します。でGUID wp_postsのテーブルとメタデータwp_postmetaは、あまりにも、変更されました。すべてのファイルが移動されたら、アクションを呼び出します:
<?php
do_action('RML/Physix/Moved', $meta, $id);
// $meta = Infos about the move process, see above screenshot
// $id = The attachment ID
?>
$ metaは配列です:
キー「名前変更」には、すべての名前変更プロセスが含まれます(たとえば、画像のサムネイルファイルになります)。
問題:プラグインの互換性を保証します。
WordPressメディアライブラリの主な問題(ある場合)は、多くのプラグインが添付ファイルIDではなく完全なURLを使用して画像への参照を保存することです。つまり、指定されたファイルへのURLを含む列を持つMySQLテーブルがあります。すべての参照が物理フォルダーで最新であることをどのように保証できますか?不可能だと思います。
1つの可能なアプローチ。
アクションにフックし、wp_post-> post_contentのような標準テーブルを更新します... ... SQLの再帰的なREPLACEステートメントを使用します。
<?php
/**
* When a attachment is moved.
*
* @hooked RML/Physix/Moved
*/
function physix_moved($meta, $id) {
$rename = $meta["rename"];
// Prepare array for recursive REPLACE
$arr = array();
foreach ($rename as $value) {
$arr[] = array($value["old_url"], $value["new_url"]);
}
$rec = $this->recReplace($arr, "post_content"); // function is already finished
}
?>
$ rec変数は、REPLACE-Statementになりました。
REPLACE(post_content, 'https://example.io/wp-content/uploads/Another-Doc.pdf', 'https://example.io/wp-content/uploads/pdfs/subdir/Another-Doc.pdf')
ちなみに、すべてのサムネイルファイルを含む画像(testimage.jpg)の場合、次のようになります。
REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(post_content, 'https://example.io/wp-content/uploads/testimage-750x350.jpg', 'https://example.io/wp-content/uploads/pdfs/subdir/testimage-750x350.jpg'), 'https://example.io/wp-content/uploads/testimage-1170x855.jpg', 'https://example.io/wp-content/uploads/pdfs/subdir/testimage-1170x855.jpg'), 'https://example.io/wp-content/uploads/testimage-256x187.jpg', 'https://example.io/wp-content/uploads/pdfs/subdir/testimage-256x187.jpg'), 'https://example.io/wp-content/uploads/testimage-1024x748.jpg', 'https://example.io/wp-content/uploads/pdfs/subdir/testimage-1024x748.jpg'), 'https://example.io/wp-content/uploads/testimage-300x219.jpg', 'https://example.io/wp-content/uploads/pdfs/subdir/testimage-300x219.jpg'), 'https://example.io/wp-content/uploads/testimage-150x150.jpg', 'https://example.io/wp-content/uploads/pdfs/subdir/testimage-150x150.jpg'), 'https://example.io/wp-content/uploads/testimage.jpg', 'https://example.io/wp-content/uploads/pdfs/subdir/testimage.jpg')
しかし、データベーステーブル内のシリアル化された文字列(JSON)の場合はどうなりますか?のように見えます{ "image": "http:\/\/example.io\/wp-content\/uploads\/Another-Doc.pdf" }
。REPLACE-Statementに何を追加する必要がありますか?
REPLACE-Statementは、イメージURLを含むすべてのMySQLテーブルで使用できるようになりました。プラグインがテーブルを追加できるフィルター配列を作成し、残りは拡張機能で処理することを考えました。
<?php
$tables = apply_filters("RML/Physix/Moved/Tables", array( // TODO: use $wpdb->prefix
"wp_posts" => array("post_excerpt", "post_content"),
"wp_postmeta" => array("meta_value")
//...
));
?>
「移動」ログ
ユーザーが移動を取り消すことができる「ログ」を作成したい。ユーザーが画像を壊した場合(たとえば、Slider Revolutionプラグイン)、元のフォルダーへの移動を元に戻すことができます。
その考えについてどう思いますか?より良い解決策はありますか?私はすべてを良い方法で説明したことを願っています!