사용자 정의 메타 상자를 사용하여 슬라이드 쇼 사용자 정의 포스트 유형을 작성하는 데 도움이됩니까?


16

사용자 정의 게시물 유형 "Slideshow"에 대해 사용자 정의 게시물 메타 상자를 만들어야합니다 (이 게시물 유형은 이미 생성되어 있습니다). 각 메타 박스는 각 슬라이드 슬라이드의 내용을 보관하고 해당 사용자 정의 필드에 저장합니다. 각 메타 박스에는 다음 필드가 포함되어야합니다.

  • 제목 (텍스트 필드)
  • 이미지 (img URL의 텍스트 필드 또는 게시물에 첨부 된 이미지의 축소판을 표시하는 드롭 다운 목록)
  • 코드 포함 (텍스트 영역)
  • 설명 (wysiwyg)
  • 슬라이드 숨기기 (슬라이드를 삭제하지 않고 임시로 숨기는 데 사용하는 확인란)
  • 슬라이드 삭제 (이 슬라이드로 채워진 포스트 메타 필드의 내용을 삭제하는 버튼)

또한 "슬라이드 추가"버튼을 클릭하여 클릭하면 다른 "슬라이드"사용자 정의 메타 상자가 추가되고 첫 번째의 복제본이지만 각 사용자 정의 게시물 메타 필드에 증분 번호가 추가됩니다. 현재 15 개의 메타 박스가 있으며 슬라이드 쇼 템플릿은 5 개의 메타 박스 만 채워지면 5 개의 슬라이드 만 표시되도록 설정됩니다.

마지막으로 "드래그 앤 드롭"또는 주문 번호를 입력 할 수있는 다른 텍스트 필드를 기준으로 슬라이드를 다시 정렬 할 수 있기를 원합니다.

"More Fields"플러그인 과 Rarst의 일부 코드 도움말을 통해 거의 필요한 곳에 도달했습니다. "More Fields"플러그인을 사용하면 각 메타 박스에 다음 필드가 있습니다.

  • 제목 (텍스트 필드)
  • 이미지 (게시물에 첨부 된 이미지의 드롭 다운 목록)
  • 코드 포함 (텍스트 영역)
  • 설명 (wysiwyg)
  • 슬라이드 숨기기 (슬라이드를 삭제하지 않고 임시로 숨기는 데 사용하는 확인란)

다음은 "추가 필드"플러그인을 통해 설정하는 방법의 스크린 샷입니다.

대체 텍스트

이 문제는 "추가 필드"가 <?php delete_post_meta($post_id, $key, $value); ?>아무데도 사용되지 않으므로 슬라이드를 만든 후에는 슬라이드를 삭제할 수있는 방법이 없다는 것 입니다. 플러그인의 다른 문제는 플러그인이 너무 신뢰할 수없고 업데이트로 자주 중단된다는 것입니다.

나는 다음을 포함하는 내 자신의 사용자 정의 메타 박스로 비슷한 솔루션을 구현할 수있었습니다.

  • 제목 (텍스트 필드)
  • 이미지 (img URL의 텍스트 필드)
  • 코드 포함 (텍스트 영역)
  • 설명 (텍스트 영역)
  • 슬라이드 숨기기 (슬라이드를 삭제하지 않고 임시로 숨기는 데 사용하는 확인란)

이 구현으로 여러 TinyMCE 필드가 작동하거나 이미지 드롭 다운 상자를 얻을 수없는 것 같습니다. TinyMCE 코드는 TinyMCE 버튼이 있어야하는 필드 바로 위에이 오류가 발생하는 시점에서 첫 번째 메타 박스의 증분 사본을 작성하는 코드를 추가 할 때까지 작동하는 것 같습니다 Warning: array_push() [function.array-push]: First argument should be an array....

또한 지금은 필자가 각 슬라이드에 비디오 또는 이미지를 넣는 것을 알기 위해 작가에게 의존하고 있지만 괜찮습니다. 단일 슬라이드를 선택할 수있는 라디오 버튼이있는 것이 좋습니다 (아마도 기본값은 슬라이드 쇼 템플릿의 조건부 디스플레이 문에 연결되어 있습니다.

사이드 바의 내장 "추천 이미지"상자를 통해 이미지 업로드를 처리하고 있지만 쓰기 패널 상단에 "이미지 업로드"라고하는 사용자 지정 메타 박스는 신경 쓰지 않습니다.

궁극적으로 나는 이와 비슷한 슬라이드 쇼를 찾고 있습니다 : http://www.nytimes.com/slideshow/2010/08/10/science/20100810angier-1.html . 사진 대신 슬라이드의 내용으로 비디오를 가질 수 있기를 바랍니다. 필자에게는 직관적이고 사용하기 쉬운 관리자 패널이 필요합니다 (HTML 및 / 또는 짧은 코드를 사용하는 것은 기술에 정통하지 않으며 신뢰할 수 없습니다). 예제에서 명확하지 않은 경우를 대비하여 모든 슬라이드는 새 페이지 뷰를 생성해야합니다.

Drag'n'Drop 재정렬은 우선 순위가 높지 않지만 시원합니다. 이것을 정말 잘 처리하는 플러그인을 찾았습니다 : SlideDeck . 불행히도 플러그인은 내 요구에 맞지 않지만 슬라이드 순서를 처리하는 방식은 매우 매끄 럽습니다. 사이드 바에있는 별도의 메타 박스로 슬라이드를 원하는 순서대로 드래그 할 수 있습니다. "슬라이드 추가"단추를 클릭하여 다른 슬라이드 메타 박스를 쓰기 패널에 추가하여 슬라이드를 추가하는 방법이기도합니다. 스크린 샷은 다음과 같습니다.

대체 텍스트

또한 워드 프레스 저장소에서 작동중인 스크린 샷을 더 볼 수 있습니다 .

내 코드는 다음과 같습니다.

슬라이드 쇼 게시물 유형 및 슬라이드 쇼 페이지 매김을 설정하는 기능 : http://loak.pastebin.com/g63Gf186

메타 박스를 기반으로 한 DeluxeBloggingTips.com (DBT) 의 원본 코드 : http://loak.pastebin.com/u9YTQrxf

동일한 메타 박스의 증분 버전을 제공하기 위해 수정 한 DBT 코드 버전 : http://loak.pastebin.com/WtxGdPrN

Chris Burbridge 가 TinyMCE의 여러 인스턴스를 허용하기 위해 생성 한 DBT 코드의 수정 된 버전 : http://loak.pastebin.com/Mqb3pKhx 이 코드를 사용하면 TinyMCE 가 작동합니다.

내 증분과 게시물에 첨부 된 모든 이미지의 드롭 다운 목록에서 이미지를 선택할 수있는 필드를 통합하려는 Burbridge 코드 수정 : http://loak.pastebin.com/xSuenJTK 이 시도에서 TinyMCE 이 깨져서 드롭 다운이 작동하지 않습니다.

이것은 중요하지 않지만 궁금한 경우를 대비하여 사용자 정의 게시물 메타에서 소스 코드를 가져 와서 크기를 조정하고 게시물에 삽입하는 데 사용하는 코드는 다음과 같습니다. http://loak.pastebin.com / n7pAzEAw

프로젝트의 현재 상태를 반영하고 주석에 게시 된 질문에 답변하기 위해 원래 질문의 편집 된 버전입니다. 현상금 을 낸 Chris_O 에게 감사드립니다 . 또한 ThemeHybrid.com 포럼 에서 RarstJustin 에게 많은 도움을 주셔서 감사합니다 . 나는 이것에 몇 시간을 보냈고 붙어 있습니다 (나는이 질문에 혼자 두 시간을 보냈습니다). 도움을 주시면 감사하겠습니다.


스케치처럼 전체 그림을 보여주는 간단한 이미지를 그릴 수 있습니까? 나는 그것이 당신의 요구를 더 잘 이해하는데 도움이된다고 생각합니다.
hakre

바닥에 몇 가지 예를 추가했습니다. 이것이 확실하지 않은 경우 알려주세요.
matt

여전히 명확하지 않습니까?
matt

누군가? 이거에요?
matt

@Hakre, 거기있어?
matt

답변:


6

외관상 가장 안전하고 쉬운 방법은 More Fields 플러그인을 포크로 사용하는 것입니다. 포크가 필요로하는 두 가지 가장 큰 특징은 필드 "공장"과 드래그 앤 드롭 인터페이스입니다.

여러 필드

내 제안은 WordPress 위젯 클래스 를보고 필드 팩토리의 모델로 사용하는 것입니다. 기본적으로 프레임 워크가 구축되면 필드의 여러 인스턴스를 만들 수있는 기능을 빌립니다.

이것은 사이드 바에서 여러 위젯이 작동하는 방식의 핵심입니다.

  • WP_Widget클래스 를 확장하여 각 위젯에 대한 코드를 한 번 정의하십시오 .
  • 그런 다음 원하는만큼 위젯 사본을 작성할 수 있습니다.
    • 각 위젯의 세부 사항은 옵션 테이블에 직렬화 된 데이터로 저장됩니다.
  • 각 위젯을 사용자 정의하고 간단한 delete명령으로 위젯을 제거하고 모양 드래그 앤 드롭 인터페이스를 통해 명시 적으로 위치를 설정할 수 있습니다

끌어서 놓기

다시 한 번 영감을 얻기 위해 WordPress 위젯 시스템을 찾는 것이 좋습니다. 우리는 이미 상당히 직관적 인 끌어서 놓기 인터페이스를 설정 했으므로 다른 곳에서 동일한 코드의 많은 부분을 쉽게 재사용 할 수 있습니다. 또는 정말 화려하고 싶다면 별도의 사용자 정의 메타 필드 내에 자체 드래그 앤 드롭 시스템을 구현할 수 있습니다.

따라서 각 슬라이드는 게시물에 연결된 사용자 정의 메타 상자로 정의됩니다. 슬라이드의 순서는 게시물과 연결된 별도의 사용자 정의 메타 상자로 설정됩니다. 정보를 기반으로 슬라이드 순서 메타 상자를 동적으로 업데이트 할 수 있도록 AJAX를 통해 슬라이드 업데이트를 제출하는 것이 좋습니다. 이렇게하면 수동으로 "업데이트"를 누르고 페이지가 다시로드 될 때까지 기다리지 않아도됩니다.

jQuery UI에는 이 사용자 정의 메타 박스 내에서 사용자의 목적에 따라 쉽게 조작 할 수 있는 훌륭한 " 끌기 "인터페이스가 있습니다. 어려운 부분은 인터페이스를 구축하지 않고 메타 상자와 페이지의 다른 위치에있는 슬라이드 메타 상자 모음간에 일관되고 정확한 커뮤니케이션을 제공하는 것입니다.

요약해서 말하자면

내가 당신의 게시물에서 수집 한 것은 다소 실용적인 해결책이 있다는 것입니다.

  • 추가 필드 위젯을 통해 15 개의 사용자 정의 필드를 사용자 정의 게시물 유형에 추가했지만 설정된 숫자로 작업하지 않고 필드 를 동적으로 추가 / 제거 하려고합니다
  • 슬라이드가 순서대로로드되도록 이러한 사용자 정의 필드의 순서를 조정하는 방법을 원합니다

내가 접근하는 방법은 사용자 지정 메타 생성 프로세스를 반복해서 사용하여 새 사용자 지정 메타 필드를 만들 수있는 클래스로 추상화하는 것입니다. 그런 다음 클래스를 확장하여 두 가지 유형의 메타 상자를 초기화합니다. 하나는 슬라이드, 하나는 슬라이드 구조입니다. 또한 슬라이드 구조 메타 상자에 새 슬라이드 메타 상자를 동적으로 만들 수있는 기능을 추가했습니다 (슬라이드 메타 상자에는 자체 "삭제"작업이 포함됨).

전체 슬라이드 쇼 슬라이드 메타 박스가없는 저장 될 수 있지만, 게시물에 대한 사용자 정의 메타 필드에 슬라이드 구조 메타 박스 - 슬라이드 각각 그 안에 배열로 표현하여 사용자 정의 메타는, 가변 배열 될 것이다 - 에서 주문 . 구조 메타 상자에서 슬라이드 쇼 순서를 사용자 정의하면 배열이 재구성되고 사후 메타가 다시 저장됩니다. 이렇게하면 슬라이드 쇼에 액세스 할 때 읽을 메타 값이 1 개만 있습니다.

SlideDeck, More Fields 및 지금까지 작성한 사용자 정의 코드 사이에 이미 대부분의 솔루션이 준비되어 있습니다. 모두 동시에 작동하도록해야합니다. JavaScript 구현을 추가하기 전에 먼저 루트 구현을 내리는 데 중점을 두었습니다. 슬라이드를 동적으로 생성, 수정, 저장 및 삭제하는 것이 서식있는 텍스트 편집기 인 IMO보다 중요합니다. 먼저 알아 내세요. 그런 다음 주문 시스템을 다운하십시오. 그런 다음 페이지에서 TinyMCE의 여러 인스턴스를 작동시키는 데 집중할 수 있습니다.


도와 주셔서 감사합니다! 현재 이것은 내 기술 중 일부가 아니지만 학습 과정을 안내하는 좋은 가이드가 될 것입니다. "클래스"를 알고 있으며 이미 메타 박스 코드에서 클래스를 사용하고 있지만 여전히 이해하지 못한다는 것을 알고 있습니다. 내가 "인식"하지만 완전히 이해하지 못하는 또 다른 것은 배열의 사용입니다.
matt

펀더멘털을 먼저 낮추는 것에 대한 당신의 충고는 이해가되지만 프로덕션 환경에 최대한 빨리 접근해야하는 실제 제약 조건에 위배됩니다. 가장 중요한 요소 중 하나는 wysiwyg 에디터입니다. . 프로젝트를 점진적으로 만들고 목발에 의존하는 것은 마음에 들지 않지만이 접근법은 분명히 확장 가능해야합니다. "더 많은 필드"플러그인을 사용하면 이것을 알아낼 때까지 임시 솔루션으로 사용할 수있을 것 같습니다. 그러나 그것이 잘 작동하는지 잘 모르겠습니다 ...
matt

전체 슬라이드 쇼를 하나의 사용자 정의 필드에 저장하는 방법. 한 분야에 모두 넣는 것이 더 좋다고 생각하십니까? 이것은 무지하게 들릴지 모르지만 약간의 변경이있을 때마다 wp가 전체 슬라이드 쇼를 다시 작성 해야하는 경우 오류가 발생할 여지가 훨씬 많은 것 같습니다.
matt

전체 쇼를 하나의 메타 필드에 저장하면 문제를 예방 및 유발할 수 있습니다. 여러 필드를 선택, 읽기 및 반복하지 않아도 프레젠테이션 사이트에서 시간을 절약 할 수 있습니다. 그러나 하나의 슬라이드에서 무언가가 깨져서 DB에 쓰여지면 전체 슬라이드 쇼가 깨집니다. 분명히 트레이드 오프이지만 항상 속도와 개발 용이성을 선택합니다.
EAMann

사이트의 프런트 엔드에서 시간을 절약한다고 말하고 있습니까? 한 번에 하나의 슬라이드 만 표시하는 이유는 무엇입니까?
matt

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.