it-swarm-ko.tech

쇼 WP 3.0 HTML의 사용자 정의 메뉴 자동 탐색으로 선택 하시겠습니까?

클라이언트를위한 테마의 일부로 사용자 정의 메뉴 (관리자를 통해 정의 됨)를 표시 할 수 있기를 원합니다 선택을 변경 한 후 페이지를 자동으로 변경하는 선택 상자 .

이 작업을 수행 할 플러그인 (또는 편리한 코드 스 니펫)이 있습니까?

3
Keith S.

WordPress의 새로운 메뉴 시스템은 여러분이 무엇을하려고하는지, 어떤 요일에 따라 놀라 울 정도로 무한합니다. :) 좋은 생각이지만 아직 성숙하지는 않았기 때문에 WordPress의 v3.3 또는 v3.4가 출시되고 더 많은 유스 케이스를 얻을 때 더 행복해질 것입니다. 메뉴 시스템의 API에서 지원합니다.

즉, 원하는 플러그인을 찾을 수 있는지 확실하지 않지만 자신 만의 플러그인을 작성해야하는 코드는 어떻습니까? 또는 테마의 functions.php 파일; 원하는대로.

내가 제공하는 것은 테스트하기 위해 웹 사이트의 루트 디렉토리에 test.php (으)로 저장할 수있는 완전히 독립적 인 예제입니다. 도메인이 example.com 인 경우 다음을 테스트하기 위해로드해야합니다.

http://example.com/test.php

실제 모습은 다음과 같습니다.

Inactive drop down of Pages from WordPress 3.0 Menu
(출처 : mikeschinkel.com )
Active drop down of Pages from WordPress 3.0 Menu
(출처 : mikeschinkel.com )

아래 코드에서 get_page_selector() 함수를 테마에 쉽게 통합하고이 기능이 필요할 때마다 호출 할 수 있어야합니다.

<?php

  include "wp-load.php";
  echo 'Jump to:';
  echo get_page_selector('My Select Menu');

function get_page_selector($menu) {
  $page_menu_items = wp_get_nav_menu_items($menu,array(
    'meta_key'=>'_menu_item_object',
    'meta_value'=>'page',
  ));
  $selector = array();
  if (is_array($page_menu_items) && count($page_menu_items)>0) {
    $selector[] =<<<HTML
<select id="page-selector" name="page-selector"
    onchange="location.href = document.getElementById('page-selector').value;">
HTML;
    $selector[] = '<option value="">Select a Page</option>';
    foreach($page_menu_items as $page_menu_item) {
      $link = get_page_link($page_menu_item->object_id);
      $selector[] =<<<HTML
<option value="{$link}">{$page_menu_item->title}</option>
HTML;
  }
    $selector[] = '</select>';
  }
  return implode("\n",$selector);
}

어떻게 작동하는지 궁금하십니까?

wp_get_nav_menu_items() 함수

WordPress 3.0은 메뉴를 wp_posts 테이블에 post_type 유형 nav_menu_item로 저장합니다. wp_get_nav_menu_items()은 간접적으로 get_posts() 함수를 호출합니다. wp_get_nav_menu_items()의 첫 번째 매개 변수는 1.) 메뉴 이름 ((사용한 이름 : "My Select Menu"), 2.) 메뉴 항목 ID (예 : 메뉴) 항목의 게시물 ID 데이터베이스) 또는 3.) 메뉴 슬러그 (메뉴의 분류 용어에서 슬러그; 예 메뉴는 'nav_menu' 분류와 함께 분류 용어를 사용하여 구현됩니다.)

Menu Configuration in WordPress 3.0
(출처 : mikeschinkel.com )

첫 번째 매개 변수를 넘어서서 $argsget_posts()로 전달되는 대부분 (모두가 아닙니까?) wp_get_nav_menu_items()에 전달하므로 사용자 정의 게시물 유형처럼 취급 할 수 있습니다 좋은 생각은 아니지만 오늘은 해가 비추는 동안 건초를 만드십시오!)

meta_keymeta_value로 메뉴 항목 필터링

메뉴 항목에 대한 WordPress의 기본 게시물 사용은 meta_keymeta_value; WordPress는 각 메뉴 항목에 필요한 추가 정보에 대해 meta_keys 접두사가 붙은 일련의 _menu_item을 사용합니다. _menu_item_object는 WordPress "Page" 게시물 유형에 해당하는 모든 메뉴 항목에 대해 page을 포함합니다. (페이지 이외의 항목을 포함하려면 여기에서 수행 한 것보다 약간 더 많은 조사를 수행해야하지만 최소한 조사를 수행하는 데 필요한 도구를 제공했습니다.)

다음은 여러 nav_menu_items에 대한 메타 레코드를 표시하는 쿼리의 Navicat for MySQL 을 사용한 스크린 샷입니다.

Menu Item Configuration found in wp_postmeta with WordPress 3.0
(출처 : mikeschinkel.com )

get_post_link()을 사용하여 페이지의 URL 가져 오기

다음으로 get_post_link() 함수에서 페이지의 URL을 가져오고 HTML <option>value을 URL로 설정하고 있음을 지적하겠습니다 ...

<?php
    $link = get_page_link($page_menu_item->object_id);
    $selector[] =<<<HTML
<option value="{$link}">{$page_menu_item->title}</option>
HTML;

자바 스크립트의 onchange을 사용하여 선택된 페이지로 이동

..._ 'page-selector'<select> 요소의 value 속성에서 가져 와서 location.href에 할당 할 수 있습니다. location.href을 (를) 할당하면 브라우저가 즉시 새 URL을 탐색하게되며 간단히 말해서 모든 작업이 완료됩니다.

<?php
  $selector[] =<<<HTML
<select id="page-selector" name="page-selector"
    onchange="location.href = document.getElementById('page-selector').value;">
HTML;

기본 옵션으로 비어있는 value=""

"페이지 선택" 기본 옵션의 값은 비어 있습니다. 그것은 실수가 아니라 의도적으로 설계된 것입니다. 선택하고 "onchange"가 트리거 될 때1 location.href을 빈 문자열로 설정해도 아무런 효과가 없습니다. 정확히 원하는 것이므로 예외 코드를 작성할 필요가 없습니다. 비올라!

<?php
    $selector[] = '<option value="">Select a Page</option>';
  1. "페이지 선택" 트리거 "onchange"을 (를) 선택하면 다른 옵션이 이전에 있던 페이지 다시로드를 트리거하지 않는 페이지로의 브라우저 다시 탐색에서만 발생할 수 있습니다. 선택되었지만 여전히 발생할 수 있으므로 해결해야합니다.
8
MikeSchinkel