소개.
위의 스크린 샷에서 프리미엄 플러그인 Real Media Library로 빌드 된 폴더 구조를 볼 수 있습니다 . 이제 폴더 구조를 실제 폴더 구조 로 구성 할 수있는 확장 플러그인을 만들고 싶습니다 . RML은 시각적 구조 일뿐입니다.
업데이트 # 2 (2017-01-27) : 답을 확인하십시오!
무료 확장 플러그인을 만든 워드 프레스 미디어 라이브러리 (실제 미디어 라이브러리 플러그인)의 물리적 구성을 살펴보십시오 .
업데이트 # 1 (2016-12-14) : 첫 번째 성공 : 맞춤 미리보기 이미지 업로드 폴더
이제 다른 플러그인 Real Thumbnail Generator 를 만들었는데,이를 통해 커스텀 썸네일 업로드 폴더를 만들 수 있습니다. 이 스크린 샷을 살펴보십시오.
맞춤 미리보기 이미지 폴더가 필요한 이유 여기서는 축소판이 여전히 동일한 위치에 있기 때문에 데이터베이스 업데이트 URL을 유지 관리 할 필요가 없기 때문에 사용자 지정 축소판 폴더를 유지 관리하기가 더 쉽습니다 (여전히 RML 확장명으로 변경되지 않음).
커스텀 썸네일 생성기에 대해 더 자세히 알고 싶다면이 스레드를 살펴볼 수 있습니다. 여기에서 기술적 인 접근 방식을 설명 했습니다. 커스텀 업로드 디렉토리의 각 커스텀 이미지 크기는? .
2017 년 초부터 RML과 서버 업로드 폴더 간의 동기화를 허용하는 RML 확장 개발을 계속할 것이기 때문에이 스레드를 유지하십시오. 이 확장은 Real Thumbnail Generator 플러그인과도 호환되므로 데이터베이스 업데이트가 있어야합니다.
원본 게시물
내 확장 목표.
현재 "/ Unorganized"폴더에 있습니다. 이는 / wp-content / uploads / 폴더입니다. 스크린 샷에서 볼 수 있듯이 파일을 PDFs / SubDir 폴더로 이동하면 파일이 시각적 폴더에 있습니다. 이제 내 확장 프로그램은 실제 폴더와 다른 폴더를 감지하고 사용자가 실제로 폴더를 이동할 수있는 작은 "버튼"을 표시합니다.
사용자는 "Physix it!"버튼을 클릭합니다. 파일은 /wp-content/uploads/pdfs/subdir/Another-Doc.pdf 로 이동해야합니다 . 이동 프로세스를 이미 만들었습니다.이 첨부 파일의 모든 미디어 파일 (이미지의 축소판 그림 포함)을 읽고 WP 함수 wp_mkdir_p () 와 함께 php 함수 rename ($ old_file, $ new_file) 을 사용하십시오 . 의 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 테이블이 있습니다. 실제 폴더에 대한 모든 참조가 최신 상태 임을 어떻게 보장 합니까? 불가능하다고 생각합니다.
하나의 가능한 접근법.
작업에 연결하고 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에 무엇을 추가해야합니까?
이미지 URL이 포함 된 모든 MySQL 테이블에서 REPLACE-Statement를 사용할 수 있습니다. 플러그인이 테이블을 추가하고 내 확장이 나머지를 수행 할 수있는 필터 배열을 만들려고 생각했습니다.
<?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")
//...
));
?>
"이동"로그
사용자가 이동을 취소 할 수있는 "로그"를 만들고 싶습니다. 사용자가 이미지를 볼 경우 (예 : 슬라이더 회전 플러그인에서) 원래 폴더로 이동을 취소 할 수 있습니다.
그 아이디어에 대해 어떻게 생각하십니까? 더 나은 해결책이 있습니까? 나는 좋은 방법으로 모두 설명했으면 좋겠다!