ワードプレスメディアライブラリの物理的編成(Real Media Libraryプラグイン)


22

Real Media Libraryのフォルダー構造

前書き。

上記のスクリーンショットでは、プレミアムプラグインReal Media Libraryで構築されたフォルダー構造を見ることができます。次に、フォルダ構造を物理的なフォルダ構造に整理できる拡張プラグインを作成します-RMLは視覚的な構造にすぎません。

アップデート#2(2017-01-27):答えをチェックしてください!

見ていWordPressのメディアライブラリの物理的な組織(リアルタイムメディアライブラリプラグイン)私は自由な拡張プラグインを作成しました。

更新#1(2016-12-14):最初の成功:カスタムサムネイルアップロードフォルダー

ここで、別のプラグインReal Thumbnail Generatorを作成しました。これにより、カスタムサムネイルアップロードフォルダーを作成できます。このスクリーンショットをご覧ください:

Real Thumbnail Generator Uploadフォルダー

カスタムサムネイルフォルダーを使用する理由 カスタムサムネイルフォルダーは、サムネイルがまだ同じ場所にあるため、データベースの更新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プラグイン)、元のフォルダーへの移動を元に戻すことができます。

その考えについてどう思いますか?より良い解決策はありますか?私はすべてを良い方法で説明したことを願っています!


9
添付ファイルの基礎となるフォルダー構造を表示するつもりはありませんが、多くの場合、ファイルがない(おそらくファイルがサーバー上にないのですか?S3 AWS CDNなど)、WordPressは添付ファイルではなく添付ファイルの投稿を扱いますサーバー上でそれらを移動すると逆効果になります。あなたはより良いトリガーリダイレクトというカスタム分類と書き換え規則でこれをやっているだろう
トム・J Nowell

5
これは明快さ/品質の面では優れた質問ですが(努力の場合は+1)、最終的にここではサードパーティのプラグインを扱います。これはトピック外と見なされます。 RMLに真剣に投資することなく、「迅速に」支援します。
TheDeadMedic

@TheDeadMedicはい、そうです。しかし、RMLのアクションでどのように機能するかを知っているという方法で質問をしました。この質問はRML固有のものではなく、データベース固有のものです-URL置換で問題を解決する方法。
マティアスギュンター

2
そして、努力のためのもう1つの+1 –このような質問がもっとあればいいのにと思います...初期の頃のように。とにかく、主な問題は上で概説されています。あなたの主張をするために:あなたが編集を提出して、あなたがしようとしていることの理由を説明してください。これまでのところ、これらのファイルシステムのタスクを実行しても意味がありません。
カイザー

この@MatthiasGünterでどうやって行きましたか?解決策を見つけることができましたか?
ティムマローン

回答:


1

無料のソリューション拡張機能「Physical Custom Upload Folder」

ずっと前に私はこのスレッドを開き始めました、そして今、あなたは物理的にアップロードフォルダを管理することを可能にするReal Media Library用の有用な拡張プラグインがあります

ここに画像の説明を入力してください

このプラグインをチェックしてください:https : //wordpress.org/plugins/physical-custom-upload-folder/

wp-content / uploadsフォルダーを知っていますか?そこに、ファイルは年/月ベースのフォルダーに保存されます。これは、特にFileZillaなどのFTPクライアントを使用している場合、非常に複雑で大量のプロセスになる可能性があります。

既にアップロードされたファイルを移動する:このプラグインは、WordPressが別の場所のURLを使用するため、Real Media Libraryでファイルを移動する場合、物理的にファイルを移動することはできません。そのようなプロセスを維持することは非常に困難です。したがって、これは新しいアップロードに対してのみ機能します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.