it-swarm.asia

Göster WP 3.0 HTML'de Özel Menü Otomatik Gezinme ile Seçim Yapılsın mı?

Bir müşteri için bir temanın parçası olarak, Özel bir menü gösterebilmek istiyorum (admin ile tanımlanır) seçimi değiştirdikten sonra sayfaları otomatik olarak değiştiren bir seçim kutusunda .

Bunu gerçekleştirecek bir eklenti (veya kullanışlı bir kod pasajı) var mı?

3
Keith S.

WordPress'in yeni menü sistemi, ne yapmaya çalıştığınıza ve haftanın hangi günü olduğuna bağlı olarak hem harika hem de sonsuz derecede sinir bozucu . :) Harika bir fikir ama olgun olmaktan uzak, bu yüzden alkışlamak bir özellik olsa da, WordPress'in v3.3 veya v3.4'leri piyasaya sürdüğünde daha mutlu olacağım ve menü sisteminin API'sinin doğrudan desteklediği birçok kullanım durumu elde edeceğiz .

Bu, aradığınızı yapmak için mevcut bir eklenti olup olmadığından emin değil, fakat kendi eklentinizi yazmanız gereken kod hakkında ne düşünüyorsunuz? Ya da sadece ekleyebilirdiniz. temanın functions.php dosyasında; Tercihiniz ne olursa olsun.

Sağladığım şey, test etmek için web sitenizin kök dizininde test.php olarak kaydedebileceğiniz tamamen bağımsız bir örnektir. Alanınız example.com olsaydı, test etmek için yüklerdiniz:

http://example.com/test.php

İşte göründüğü gibi görünüyor:

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

Aşağıdaki koddan, get_page_selector() işlevini temanıza dahil etmek ve bu işlevselliğe ihtiyaç duyduğunuzda onu çağırmak kolay olmalıdır:

<?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);
}

Yani nasıl çalıştığını merak ediyor olabilirsiniz?

wp_get_nav_menu_items() işlevi

WordPress 3.0 menülerini wp_posts tablosundaki post_typenav_menu_item türü olarak saklar. wp_get_nav_menu_items(), dolaylı olarak yalnızca get_posts() işlevini çağırır. wp_get_nav_menu_items() parametresinin ilk parametresi ya 1'dir.) Bir menü adı (kullandığım şey: "Seçim Menüm" ), 2.) bir menü öğesi kimliği (yani menü öğesinin yazısı ID_ veritabanı) veya 3.) bir menü sümüklüböceği (menünün taksonomi teriminden gelen sümük, evet menüler, 'nav_menu' taksonomisine sahip taksonomi terimleri kullanılarak uygulanır).

Menu Configuration in WordPress 3.0
(kaynak: mikeschinkel.com )

İlk parametrenin ötesinde, $args işlevinin get_posts() çoğuna (hepsi değil mi?) İletilir. Böylece, wp_get_nav_menu_items() işlevine geçersiniz, böylece özel bir yazı türü gibi davranabilirsiniz (API menüsünü geliştirdiklerinde daha uzun süreli olsa bile harika bir fikir. Ama bugün? Güneş parlarken saman yapın!)

meta_key ve meta_value ile Menü Öğelerini Filtreleme

WordPress'in menü öğeleri için yazıların kullanılmasının altında yatan nedeni, neden meta_key ve meta_value; WordPress, her menü öğesi için ihtiyaç duyduğu ek bilgiler için meta_keys ile eklenmiş bir _menu_item dizisi kullanır. _menu_item_object, bir WordPress "Sayfa" yazı tipine karşılık gelen her menü öğesi için page öğesini içerecektir. (Sayfaların yanı sıra öğeleri de dahil etmek istiyorsanız, burada yaptığımdan biraz daha fazla araştırma yapmanız gerekecek, ancak en azından araştırmayı kendiniz yapmanız için gereken araçları verdim.)

İşte birkaç nav_menu_items için meta kayıtlarını gösteren bir sorgunun MySQL için Navicat özelliğini kullanan bir ekran görüntüsü:

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

Sayfa URL'sini get_post_link() ile kapma

Sonra sayfanın URL'sini get_post_link() işlevinden aldığımı ve HTML <option> 'nin value kodunu URL olacak şekilde ayarlayacağımı ...

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

Seçilen Sayfamıza Gitmek için Javascript'in onchange Kullanılması

... Böylece 'page-selector'<select> öğesinin value özelliğinden kapatabilir ve location.href öğesine atayabilirim. location.href atamak, tarayıcının hemen yeni URL'ye gitmesine neden olur ve bu kısaca, tüm işlemlerin nasıl yapıldığıdır:

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

Varsayılan Seçenek Olarak Boş value=""

"Sayfa Seç" varsayılan seçeneğinin boş bir değere sahip olduğunu; bu bir hata değil, tasarımdan kaynaklanıyor. Seçildiğinde ve "onchange" tetiklenir1 location.href 'yu boş bir dizgeye ayarlamak etkisiz olacaktır, ki tam olarak istediğimiz budur ve bir istisna kodu yazmamızı gerektirmez. Viola!

<?php
    $selector[] = '<option value="">Select a Page</option>';
  1. "Bir Sayfa Seçin" tetikleyici "onchange" seçeneğinin seçilmesi, yalnızca bir tarayıcı yeniden gezintisinde, başka bir seçeneğin daha önce seçildiği yerde sayfa yeniden yüklemesini tetiklemeyen bir sayfaya yönlendirebilir, ancak Yine de olur, bu yüzden konuşmalıyız.
8
MikeSchinkel