web-dev-qa-db-ja.com

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

Real Media Library folder structure 

前書き。

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

更新#2(2017-01-27):答えをチェックしてください!

Wordpressメディアライブラリの物理的な構成(Real Media Libraryプラグイン) 私は無料の拡張プラグインを作成しました。

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

今、私は別のプラグインを作成しましたReal Thumbnail Generator、これはカスタムのサムネイルアップロードフォルダを作成することを可能にします。このスクリーンショットを見てください。

Real Thumbnail Generator Upload folder 

なぜカスタムサムネイルフォルダなのかここでは、サムネイルがまだ同じ場所にあるため(RML拡張子によって変更されないため)、データベースの更新URLを管理する必要がないため、カスタムサムネイルフォルダの管理が簡単です。

あなたがカスタムサムネイルジェネレータについてもっと学びたいならば、あなたは私が技術的なアプローチを説明したこのスレッドを見ることができます カスタムアップロードディレクトリのそれぞれのカスタム画像サイズ?

2017年の初めから私はRMLとサーバーアップロードフォルダー間の同期を可能にするRML拡張の開発を続けるので、このスレッドを続けてください。この拡張子はReal Thumbnail Generatorプラグインとも互換性があるので、データベースを更新する必要があります。

元の投稿

私の拡張目標.

現時点では、私は "/ Unorganized"フォルダにいます。つまり、それはフォルダ/ wp-content/uploads /です。スクリーンショットでわかるように、ファイルをPDFs/SubDirフォルダに移動すると、ファイルはビジュアルフォルダにあります。今私の拡張機能は物理的なものとは異なるフォルダを検出し、ユーザーもそれを物理的に移動できるようにする小さな「ボタン」を示しています:

Button to physix it 

ユーザは「Physix it!」ボタンをクリックします。ファイルは/wp-content/uploads/pdfs/subdir/Another-Doc.pdfに移動する必要があります。私はすでに移動プロセスを作成しました。この添付ファイルのすべてのメディアファイル(画像のサムネイルを含む)を読み出し、WP functionと共にphp関数 rename($ old_file、$ new_file) を使用します。 wp_mkdir_p() wp_posts テーブルのGUIDと wp_postmeta のメタデータも変更されます。すべてのファイルを移動すると、私はアクションを呼び出します:

<?php
do_action('RML/Physix/Moved', $meta, $id);
// $meta = Infos about the move process, see above screenshot
// $id = The attachment ID
?>

$ metaは配列です。

enter image description here 

キー "名前の変更"には、すべての名前変更プロセスが含まれています(たとえば、ここでは画像のサムネイルファイルを指定できます)。

問題:プラグインの互換性を保証する.

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ステートメントに何を追加しなければなりませんか?

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プラグインの中で)画像が壊れているなら、彼は元のフォルダへの移動を元に戻すことができます。

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

21

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

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

enter image description here 

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

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

すでにアップロードされているファイルを移動する: RealPlayerライブラリでファイルを移動すると、このプラグインはファイルを物理的に移動することを許可しません。そのようなプロセスを維持することは非常に困難です。そのため、これは新規アップロードに対してのみ機能します。

1