Özel menü bağlantısını bir sayfa veya yayınla değiştirmenin kolay bir yolu var mı?


14

Eklentileri aradım ve hiçbir şey bulamadım ve bunun temel bir özellik olması gerektiğine inanıyorum.

Sorun:

Özel bir bağlantıyı veya herhangi bir menü bağlantısını değiştirmek için geçerli yöntem şu işlemi yapmaktır:

  1. Eski menü bağlantısını kaldır
  2. Yeni bağlantı ekle
  3. Yeni bağlantıyı listenin sonundan sürükleyin
  4. Yeni bağlantıyı istediğiniz yere bırakın
  5. ikramiyeyi vurana kadar 3. ve 4. adımları tekrarlayın
  6. Menü seçeneklerini tekrar girin (css, label vb.)

O niçin bir problem olsun ki

Özellikle aşağıdaki durumlarda çok verimsizdir: (a) büyük menülerle (b) birçok alt seviyeli menülerle uğraşırken (c) özel seçeneklere sahip birçok menü öğesinin yerini alır

Çözüm gereksinimleri

  1. Menü konumunu / hiyerarşisini korur
  2. Seçenekleri Korur (css sınıfı, etiket, başlık)
  3. Sayfalar / Yayınlar / Kategoriler vb. Arasından seçim yapın

gösteri

http://puu.sh/laSEi/81b0d41705.png

Bu kadar basit olmalı:

resim açıklamasını buraya girin

Diğer olası fikirler, çoğaltma / "buna alt bağlantı ekle" / veya alt kısım yerine listenin başına yeni bağlantılar eklemektir.

Herhangi bir geri bildirim takdir.


4
İyi formüle edilmiş bir soru için +1 - size katılıyorum, çok verimli değil.
birgire

3
Bu soru ile sorun burada biçime uygun sorun için basit bir çözüm görmüyor olmasıdır. Muhtemelen çeşitli alanlarda bazı işlev ayarlamaları yapmaya ihtiyaç vardır. Değerli bir özellik isteği gibi göründüğü için trac'ta bunun için bir bilet açmanızı öneririm.
Mark Kaplun

1
Belki URL alanındaki yazıları, sayfaları bulmak için TinyMCE'den
bueltge

1
@MarkKaplun Birisi bunun için popüler olmayan veya başka bir şekilde özel bir eklenti bilebilir diye düşündüm, yine de, önerinizi takip ettim ve bir trac isteği oluşturdum @ core.trac.wordpress.org/ticket/34648 stackexchange'te bu soruyu sonlandırmanın uygun yolu nedir ?
Aziz

2
bitirmeyin, tüm soruların kabul edilebilir hatta geçerli bir cevabı yoktur. Bazen başkalarının da aynı konuya baktığını ve bir cevap bulamadığını bilmek güzel, bazen birisi çok geç cevap
veriyor

Yanıtlar:


1

Bu doğrudan soruyu cevaplamasa da, üzerine kurulu kod işlevselliği sağlar. Kod kümesi:

fonksiyon install_menus () {
    gerektiren_once dirname (__FILE__). '/Data.php';
    $ menus = get_menus_data ();
    if (! empty ($ menus)) foreach ($ menus $ $ olarak) {
        if ($ menu ['build']) {
            $ menu_id = create_nav_menu ($ menü);
            add_items_to_menu ($ menu_id, $ menu ['slug'], $ menu ['items']);
        }
    }
}

function create_nav_menu ($ menü) {
    if ($ exist = wp_get_nav_menu_object ($ menü ['ad']))) {
        $ menu_id = $ var -> term_id;
          if (boş ($ menu_id)) {
            $ menu_id = wp_create_nav_menu ($ menü ['ad']);
        } 
    }
    Başka {
        $ menu_id = wp_create_nav_menu ($ menü ['ad']);
    }
    return $ menu_id;
}
işlev add_items_to_menu ($ menu_id, $ slug, $ ürün) {
    if ($ items) foreach ($ item $ $ olarak) {
        if ($ item ['build']) {
            $ slug = ($ item ['title'] == 'Ana Sayfa')? 'home': $ item ['slug'];
            if (! menu_item_exists ($ slug, $ menu_id)) {
                wp_update_nav_menu_item ($ menu_id, 0, dizi (
                    'menu-item-title' => __ ($ item ['title']),
                    'menu-item-classes' => '',
                    'menu-item-url' => home_url ($ item ['slug']. '/'), 
                    'menu-item-status' => 'yayınla'
                    ));
            }
        }
    }
}
fonksiyon menu_item_exists ($ slug, $ menu_id) {
    $ args = dizi (
        'order' => 'ASC',
        'orderby' => 'menu_order',
        'post_type' => 'nav_menu_item',
        'post_status' => 'yayınla',
        'output' => ARRAY_A,
        'output_key' => 'menu_order',
        'nopaging' => doğru,
        'update_post_term_cache' => yanlış); 

    $ available = wp_get_nav_menu_items ($ menu_id, $ args);
    $ bulundu = yanlış;
    foreach ($ var olarak mevcut) {
        if (strpos ($ exist-> post_name, $ slug)! == FALSE) {// oldukça iyi arama (tam değil).
            $ bulundu = doğru;
            break;
        }

    }
    dönüş $ bulundu;
}

ve veri dosyası:

işlev get_menus_data () {
    $ items = dizi ( 
        dizi ( 
            'name' => 'Ana Menü', 'slug' => 'ana menü', 'yapı' => 1, 
            'items' => dizi (
                dizi ('title' => 'Ana Sayfa', 'slug' => '', 'build' => 1), // slug boş olmalı
                dizi ('title' => 'Blog', 'slug' => 'blog', 'build' => 1),
                dizi ('title' => 'Hakkında', 'slug' => 'yaklaşık', 'yapı' => 1),
                dizi ('title' => 'Kişi', 'slug' => 'kişi', 'yapı' => 1),
                ),
        ),
        dizi ( 
            'name' => 'İkincil Menü', 'slug' => 'ikincil menü', 'yapı' => 0,
            'items' => dizi (
                dizi ('title' => 'Ana Sayfa', 'slug' => '', 'build' => 1),
                dizi ('title' => 'Blog', 'slug' => 'blog', 'build' => 1),
                dizi ('title' => 'Hakkında', 'slug' => 'yaklaşık', 'yapı' => 1),
                dizi ('title' => 'Kişi', 'slug' => 'kişi', 'yapı' => 1),
                ),
        ),
        dizi ( 
            'name' => 'Altbilgi Menüsü', 'slug' => 'altbilgi menüsü', 'derleme' => 1,
            'items' => dizi (
                dizi ('title' => 'Terimler', 'slug' => 'terimler', 'derleme' => 1),
                dizi ('title' => 'Gizlilik', 'slug' => 'gizlilik', 'yapı' => 1),
                dizi ('title' => 'Kişi', 'slug' => 'kişi', 'yapı' => 1),
                ),
            ) 
    );
    $ ürün iade;
}

Sorulan seçime izin vermek için bunun üzerine bir arabirim oluşturulması gerekir, ancak bu kod çalışır ve test edilir.


Merhaba, Cevabınız için teşekkür ederim. Gönderdiğiniz kodu ayrıntılı olarak açıklayabilir misiniz?
Aziz

Kodu bir eklentiye veya temanın işlevlerine kopyalayıp geçerseniz, get_menus_data()işlev içinde bulunan menü öğelerini oluşturmalıdır . Bir arama sonucunun bir menü öğesini dinamik olarak doldurması için, bunu yapmak için WordPress API'sini kullanan işlevlere ihtiyaç vardır. Bu işlevler, menü öğelerinin önceden yapılandırılabileceği eksiksiz bir kendi kendine kurulum paketinin bir parçasıdır ve ideal olarak bunu gerçeğe göre yapma gereğini ortadan kaldırır. Bu işlevler "sahne arkası çalışması" sağladığından, aradığınız arama işlevselliği için bir temel olarak kullanılabilir.
cbos

1

Bunun bir cevap olduğundan emin değilim, daha çok bir tartışma noktası.

Hiç kimse WP menüleri oluşturmak için Gelişmiş Özel Alanlar olarak düşündü mü? Bunu birkaç kez yaptım ve özel menü öğesi öznitelikleriyle birlikte özel bir yapı oluşturmamı ve varsayılan WP menülerinde ihtiyaç duyulacak karmaşık bir yürüteç olmadan menü için HTML oluşturmamı sağlıyor.

resim açıklamasını buraya girin

ACF

if( function_exists('acf_add_local_field_group') ):

acf_add_local_field_group(array (
    'key' => 'group_56532ec144a4b',
    'title' => 'Menu',
    'fields' => array (
        array (
            'key' => 'field_5653338918f43',
            'label' => 'Menus',
            'name' => 'menus',
            'type' => 'flexible_content',
            'instructions' => '',
            'required' => 0,
            'conditional_logic' => 0,
            'wrapper' => array (
                'width' => '',
                'class' => '',
                'id' => '',
            ),
            'button_label' => 'Add Menu',
            'min' => '',
            'max' => '',
            'layouts' => array (
                array (
                    'key' => '56533396b10bc',
                    'name' => 'menu',
                    'label' => 'Menu',
                    'display' => 'block',
                    'sub_fields' => array (
                        array (
                            'key' => 'field_56533fc6f25e7',
                            'label' => 'Menu Name',
                            'name' => 'menu__name',
                            'type' => 'text',
                            'instructions' => '',
                            'required' => 0,
                            'conditional_logic' => 0,
                            'wrapper' => array (
                                'width' => '',
                                'class' => '',
                                'id' => '',
                            ),
                            'default_value' => '',
                            'placeholder' => '',
                            'prepend' => '',
                            'append' => '',
                            'maxlength' => '',
                            'readonly' => 0,
                            'disabled' => 0,
                        ),
                        array (
                            'key' => 'field_56532ec718f40',
                            'label' => 'Menu Items',
                            'name' => 'menu__items',
                            'type' => 'flexible_content',
                            'instructions' => '',
                            'required' => 0,
                            'conditional_logic' => 0,
                            'wrapper' => array (
                                'width' => '',
                                'class' => '',
                                'id' => '',
                            ),
                            'button_label' => 'Add Menu Item',
                            'min' => '',
                            'max' => '',
                            'layouts' => array (
                                array (
                                    'key' => '56532eee6ef81',
                                    'name' => 'menuItem',
                                    'label' => 'Menu Item',
                                    'display' => 'block',
                                    'sub_fields' => array (
                                        array (
                                            'key' => 'field_56532f0418f41',
                                            'label' => 'Label',
                                            'name' => 'menuITem__label',
                                            'type' => 'text',
                                            'instructions' => '',
                                            'required' => 0,
                                            'conditional_logic' => 0,
                                            'wrapper' => array (
                                                'width' => 50,
                                                'class' => '',
                                                'id' => '',
                                            ),
                                            'default_value' => '',
                                            'placeholder' => '',
                                            'prepend' => '',
                                            'append' => '',
                                            'maxlength' => '',
                                            'readonly' => 0,
                                            'disabled' => 0,
                                        ),
                                        array (
                                            'key' => 'field_565333d218f45',
                                            'label' => 'Class',
                                            'name' => 'menuItem__class',
                                            'type' => 'text',
                                            'instructions' => '',
                                            'required' => 0,
                                            'conditional_logic' => 0,
                                            'wrapper' => array (
                                                'width' => 50,
                                                'class' => '',
                                                'id' => '',
                                            ),
                                            'default_value' => '',
                                            'placeholder' => '',
                                            'prepend' => '',
                                            'append' => '',
                                            'maxlength' => '',
                                            'readonly' => 0,
                                            'disabled' => 0,
                                        ),
                                        array (
                                            'key' => 'field_565342ef11b29',
                                            'label' => 'Link Type',
                                            'name' => 'menuItem__type',
                                            'type' => 'radio',
                                            'instructions' => '',
                                            'required' => 0,
                                            'conditional_logic' => 0,
                                            'wrapper' => array (
                                                'width' => 25,
                                                'class' => '',
                                                'id' => '',
                                            ),
                                            'choices' => array (
                                                'page' => 'Page',
                                                'cat' => 'Category',
                                                'url' => 'URL',
                                                'cust' => 'Custom',
                                            ),
                                            'other_choice' => 0,
                                            'save_other_choice' => 0,
                                            'default_value' => '',
                                            'layout' => 'vertical',
                                        ),
                                        array (
                                            'key' => 'field_56532f2d18f42',
                                            'label' => 'Page',
                                            'name' => 'menuItem__page',
                                            'type' => 'page_link',
                                            'instructions' => '',
                                            'required' => 0,
                                            'conditional_logic' => array (
                                                array (
                                                    array (
                                                        'field' => 'field_565342ef11b29',
                                                        'operator' => '==',
                                                        'value' => 'page',
                                                    ),
                                                ),
                                            ),
                                            'wrapper' => array (
                                                'width' => 75,
                                                'class' => '',
                                                'id' => '',
                                            ),
                                            'post_type' => array (
                                            ),
                                            'taxonomy' => array (
                                            ),
                                            'allow_null' => 0,
                                            'multiple' => 0,
                                        ),
                                        array (
                                            'key' => 'field_5653434f11b2a',
                                            'label' => 'Category',
                                            'name' => 'menuItem__cat',
                                            'type' => 'taxonomy',
                                            'instructions' => '',
                                            'required' => 0,
                                            'conditional_logic' => array (
                                                array (
                                                    array (
                                                        'field' => 'field_565342ef11b29',
                                                        'operator' => '==',
                                                        'value' => 'cat',
                                                    ),
                                                ),
                                            ),
                                            'wrapper' => array (
                                                'width' => 75,
                                                'class' => '',
                                                'id' => '',
                                            ),
                                            'taxonomy' => 'category',
                                            'field_type' => 'select',
                                            'allow_null' => 0,
                                            'add_term' => 1,
                                            'save_terms' => 0,
                                            'load_terms' => 0,
                                            'return_format' => 'id',
                                            'multiple' => 0,
                                        ),
                                        array (
                                            'key' => 'field_5653439311b2c',
                                            'label' => 'Custom',
                                            'name' => 'menuItem__cstm',
                                            'type' => 'text',
                                            'instructions' => '',
                                            'required' => 0,
                                            'conditional_logic' => array (
                                                array (
                                                    array (
                                                        'field' => 'field_565342ef11b29',
                                                        'operator' => '==',
                                                        'value' => 'cust',
                                                    ),
                                                ),
                                            ),
                                            'wrapper' => array (
                                                'width' => 75,
                                                'class' => '',
                                                'id' => '',
                                            ),
                                            'default_value' => '',
                                            'placeholder' => '',
                                            'prepend' => '',
                                            'append' => '',
                                            'maxlength' => '',
                                            'readonly' => 0,
                                            'disabled' => 0,
                                        ),
                                        array (
                                            'key' => 'field_5653437011b2b',
                                            'label' => 'URL',
                                            'name' => 'menuItem__url',
                                            'type' => 'url',
                                            'instructions' => '',
                                            'required' => 0,
                                            'conditional_logic' => array (
                                                array (
                                                    array (
                                                        'field' => 'field_565342ef11b29',
                                                        'operator' => '==',
                                                        'value' => 'url',
                                                    ),
                                                ),
                                            ),
                                            'wrapper' => array (
                                                'width' => 75,
                                                'class' => '',
                                                'id' => '',
                                            ),
                                            'default_value' => '',
                                            'placeholder' => '',
                                        ),
                                    ),
                                    'min' => '',
                                    'max' => '',
                                ),
                            ),
                        ),
                    ),
                    'min' => '',
                    'max' => '',
                ),
            ),
        ),
    ),
    'location' => array (
        array (
            array (
                'param' => 'options_page',
                'operator' => '==',
                'value' => 'acf-options-theme-options',
            ),
        ),
    ),
    'menu_order' => 0,
    'position' => 'normal',
    'style' => 'default',
    'label_placement' => 'top',
    'instruction_placement' => 'label',
    'hide_on_screen' => '',
    'active' => 1,
    'description' => '',
));

endif;

UX

function acfMenu($name) {
    if( function_exists('get_field') ) :
        $getMenus = get_field('menus', 'option');
        foreach($getMenus as $menuData) : 
            if( $menuData['menu__name'] == $name ) : 
              // Do stuff to build your menu
            endif;
        endforeach;
    endif;
}

Bu sadece hızlı bir örnektir, ancak ACF'nin sunduğu seçeneklerle, her türlü şeyi bir menü öğesine yapıştırabilir ve daha sonra UI'yi istediğiniz gibi kodlayabilirsiniz.

Özel sorunuz için uygulamada, ne tür bir bağlantı sağladığınıza koşullu seçimler uygulanabilir (ekli resme bakın). ACF, sayfa bağlantıları, kategori bağlantıları veya düz URL'ler gibi birçok farklı parametreye izin verir. Bu öğelerin koşullu seçimi, sınıfları veya diğer nitelikleri silmeden menü öğesinin türünü değiştirmeye izin verir.


Önerileri görmek güzel - Bir ekran görüntüsünün fikrinizi daha iyi anlamaya yardımcı olacağından eminim ;-)
birgire

O kadar büyük bir ekran görüntüsü alabileceğimden emin değilim. İç içe ACF özellikleri biraz karışık olabilir.
Tim Plummer

0

Bu, doğru yaklaşımı tanımlamaya yardımcı olabilir.

WP'nin arkasındaki kukla felsefe, ilk olarak kurulum menülerine sahip olma yöntemini yönlendirir ve WP'nin çok fazla miktarda içeriği değişen bir siteyi ele almak için çerçeve olarak kötü bir seçim olabilmesinin nedenlerinden sadece biridir.

İçerik yönetimini mümkün olduğunca sahte bir kanıt haline getirmeye çalışırken, çoğu zaman iyi bir sebep olmaksızın çoğu zaman ekstra iş yaratan belirli paradigmalara kilitler. Yapılandırma kaybı yaşamadan menü şablonlarını kaydedemez, mevcut menüleri çoğaltamaz veya menü yeniden kullanılabilir menü öğelerini güvenli bir şekilde depolayamazsınız.

Hala çok daha fazla esneklik ve dağıtım hızı sunarken, kukla geçirmez yaklaşım arasında iyi bir orta zemin olduğu için, sundukları yerel menü formatlarına iyi bir alternatif olabilecek önerinizi beğendim. Ve can sıkıcı sürükle ve bırak işlemine bir alternatif olarak bir çok parametre ekleyebilirim.

Ancak, WP'deki menüler yönetiminin değiştirilmesini istesem de, bu yolu çok aşağı itmek çekirdek WP felsefesine karşıdır ve artık büyük ölçüde popülerliğin nedeni olan en düşük ortak paydaya hitap etmeyeceği anlamına gelebilir. WP.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.