Blog URL'sine göre URL'si olan bir Menüye Özel Bağlantı ekleme


16

Çalışmamın bir kısmı Wordpress web siteleri oluşturmak. İstemcinin incelediği test sunucusuna yüklenecek kadar iyi bir şey olana kadar genellikle dizüstü bilgisayarımda çalışırım.

Her yeni proje için bir VirtualHost oluşturuyorum, bu yüzden her zaman benzeyen bir alanda bir Wordpress yüklemesi ile çalışıyorum http://local.example.com/, ancak site test sunucusuna (benim tarafımdan kontrol edilmediğinde) yüklendiğinde, alan adı gibi bir şey olabilir http://testserver.com/arbitrary/path/example/.

Sorun, mesela, örneğin, /events/yerel olarak bir bağlantı oluşturmak için iyi çalışır işaret eden bir menüye özel bir bağlantı eklerseniz http://local.example.com/events/, ancak test sunucusunda bağlantı işaret edecek http://testserver/events/, ki bu açıkça doğru değil.
İstediğim özel bağlantıya hem yerel ortamımda hem de test sunucusunda çalışacak bir URL vermektir.

Zaten homeve siteurlWordpress seçeneklerini değiştirme sorununu ele alıyorum :

  • yerel veritabanındaki bu ayarları değiştirme
  • veritabanı dökümü oluşturma
  • sunucudaki veritabanını güncelle
  • yerel seçenekleri geri yükleme.

Özel bağlantılar için tam URL'leri kullanmak istemiyorum ve sunucunun veritabanını her güncellemem gerektiğinde bunları sunucu URL'si ile değiştirmek zorunda kalıyorum.

Yayın içeriğinin içindeki bağlantılar için, iki kısa kod ekleyerek sorunu çözen bir eklenti var: http://wordpress.org/extend/plugins/url-shortcodes/ , ancak Özel Bağlantılar için benzer bir şey bulamadım .


5
Willington, her yerde çalışan bir url'ye yardım edemem. Ne yapabilirim spectacu.la/search-and-replace-for-wordpress-databases işaret etmektir . David'in arama ve değiştirme oldukça uzun bir süredir kullanıyorum ve örneğin url's - hatta seri veri değiştirmek için iyi çalışıyor. Yani bunu nasıl yaparım: sadece sabit kodlu bağlantılar ve başka bir alana veritabanı taşıdıktan sonra dönüştürmek. İyi şanslar Peter
Peter

Şimdiye kadar başarılı bir şekilde bir dev ortamından canlı bir ortama taşımak için bulduğum tek yolu, sadece ev ve siteurl seçeneklerini değiştirmek değil, tüm dosyayı aramak ve değiştirmek için SQL dökümü yaptıktan sonra. URL'nin orada bulunduğu 1000'den fazla dosyam var. (hala bu kadar yükselmeyi nasıl başardığını bilmiyorum :))
Rob Williams

@Peter, @Rob cevapladığınız için teşekkürler, arama ve değiştirmenin tek çözüm olduğundan korktum ama önce sormak istedim. Bu senaryoya bir göz atacağım.
Willington Vega

En iyisi önerdiğim gibi bir komut dosyası kullanmaktır. Bir db dökümünde metin arama ve değiştirme işleminin, arama ve değiştirme dizelerinin uzunluğu aynı değilse ve veri uzunluğu bir uzunluk belirtimiyle db'de saklandığından, serileştirilmiş verileri (özellikle wp_options'ta bulunur) bozacağına dikkat edin. . Başarı, Peter
Peter

Yanıtlar:


9

Bunun için de bir çözüm arıyordum ve basit bir çözüm buldum.

URL alanına yerleştirmeniz gereken şey budur:

/index.php/internal-site-name

resim açıklamasını buraya girin

Sadece iyi çalışıyor!

Saygılarımla Chris


1
Bu çalışır, ancak URL'yi index.php'yi içerecek şekilde değiştirir. # Bağlantıları olan tek sayfalık bir uygulama söz konusu olduğunda, önce sayfayı yeniler ve ardından sizi hedefe götürür (yalnızca ilk seferde). Yine de, iyi bir fikir
Catalin Deaconescu

Ben index.php bölümü olmadan bir şey kullandım ve çalışıyor gibi görünüyor
user3808307

4

nav_menu_link_attributesFiltreyi, her menü öğesinin çıktısı alınmadan önce href niteliğini incelemek ve değiştirmek için kullanabilirsiniz .

Bu örnekte, a ile başlayan href özelliklerini /ararız ve bu durumda test sitesi URL'sinin başına ekleriz:

function wpd_nav_menu_link_atts( $atts, $item, $args, $depth ){
    if( '/' == substr( $atts['href'], 0, 1 ) ){
        $atts['href'] = 'http://testserver.com/example' . $atts['href'];
    }
    return $atts;
}
add_filter( 'nav_menu_link_attributes', 'wpd_nav_menu_link_atts', 20, 4 );

Bu kodla basit bir eklenti oluşturabilir ve yalnızca test sunucunuzda etkinleştirebilir veya test sitesi ortamı mevcut olduğunda bu filtreyi koşullu olarak uygulayan bir tür bayrak oluşturabilirsiniz.


Bulduğum en iyi yol bu! Ama lütfen @Milo, üçüncü satırı bu daha akıllı wordpress temel URL'si ile değiştirin (get wordpress site_url'sidir): $ atts ['href'] = site_url (). $ atts [ 'href'];
gtamborero

2

<base href=" ">Head meta'da tag kullanılması , sayfadaki tüm göreceli çapalara bir temel url verir.

Referans:
https://www.w3.org/TR/html4/struct/links.html
12.4 Yol bilgisi: BASE öğesi

Wordpress Göreli özel bağlantıların:
site url tüm çapa taban url olmak istiyorsanız bu eklemek tema / header.php içinde <head>:

<base href="<?php echo site_url(); ?>/">

Senin için geç olabileceğini biliyorum ama başka birine yardım edebilirim.


Umut verici görünüyor. Test edip rapor vereceğim.
Eric Hepperle - CodeSlayer2010

ehepperle.com/sites/in-progress/some-wp-site-root/Açıkça site kökünü ayarlamadığınız sürece yollarla çalışmaz . Web geliştirme hızı, basetag kullanılarak belirgin bir şekilde artırılmaz , çünkü başka bir siteye geçiş yaptığınızda, tabanın ne olduğunu yeniden tanımlamanız gerekir. Ancak, href değerlerinin uzunluğunu azaltma değerini görebiliyorum.
Eric Hepperle - CodeSlayer2010

Fikir iyidir, ancak Wordpress, wp özel menülerinde göreli yollar kullanırken Temel yolu yok sayıyor gibi görünüyor (örneğin: / contact)
gtamborero

1

Menü kurulumundaki özel bir URL'de [blogurl] ile ilgili bağlantılar kullanmak mümkündür. İşin sırrı, göreli URL'yi tek bir taneyle başlatmaktır /. Bir tek / özel URL'yi başlattığında, sistem tipik http://olanın önüne geçmez ve ardından geçerli blogURL yürütme zamanında hedef URL'de oluşturulur.

ÖRNEK
Ana sayfanıza gitmek istiyorsanız /, özel URL olarak eklemeniz yeterlidir

Klasördeki dizin sayfasına gitmek istiyorsanız , özel URL olarak bbforumskoyun /bbforums.

Bu, bir siteyi yeni blogURL'yi menüler için tüm özel bağlantılarda kodlamak zorunda kalmadan test alanına taşımanıza olanak tanır.

Örneğin:
Blogum ise http://example.comve bir alt http://test.example.comalanda test etmek istiyorsam , site yukarıda belirtilen göreli URL kuralını kullanarak menü sorunları olmadan test ve üretim arasında taşınabilir. Siteyi taşımak için XCloner eklentisini kullanarak bu yaklaşımı başarıyla test ettim.


6
Bu, eğik çizgiler içeren blog URL'leri için çalışmaz, örneğin example.com/blog . '/' Menü öğesinin ardından sizi example.com adresine götürürsünüz .
Jimpanzee

1

Öncelikle URL kısa kodları için bu eklentiyi yüklemeniz gerekir .

Bu kodu temanızdaki functions.phpdosyanıza ekleyin:

class description_walker extends Walker_Nav_Menu {
    function start_el( &$output, $item, $depth, $args ) {
        global $wp_query;
        $indent = ( $depth ) ? str_repeat( "\t", $depth ) : '';

        $class_names = $value = '';

        $classes = empty( $item->classes ) ? array() : (array) $item->classes;

        $class_names = join( ' ', apply_filters( 'nav_menu_css_class', array_filter( $classes ), $item ) );
        $class_names = ' class="'. esc_attr( $class_names ) . '"';

        $output .= $indent . '<li id="menu-item-'. $item->ID . '"' . $value . $class_names .'>';

        $attributes  = ! empty( $item->attr_title ) ? ' title="'  . esc_attr( $item->attr_title ) . '"' : '';
        $attributes .= ! empty( $item->target )     ? ' target="' . esc_attr( $item->target     ) . '"' : '';
        $attributes .= ! empty( $item->xfn )        ? ' rel="'    . esc_attr( $item->xfn        ) . '"' : '';

        // echo $item->url;
        $string = explode( '::', $item->url, 3 );
        if ( $string[1] ) {
            $string[1] = str_replace( '-', ' ', $string[1] );
            $item->url = do_shortcode( "[$string[1]]" ); 
        }

        $attributes .= ! empty( $item->url )        ? ' href="'   . esc_attr( $item->url        ) .'"' : '';

        $prepend = '<strong>';
        $append = '</strong>';
        $description  = ! empty( $item->description ) ? '<span>' . esc_attr( $item->description ) . '</span>' : '';

        if ( $depth != 0 ) {
            $description = $append = $prepend = "";
        }

        $item_output  = $args->before;
        $item_output .= '<a'. $attributes . '>';
        $item_output .= $args->link_before . $prepend . apply_filters( 'the_title', $item->title, $item->ID ) . $append;
        $item_output .= $description . $args->link_after;
        $item_output .= '</a>';
        $item_output .= $args->after;

        $output .= apply_filters( 'walker_nav_menu_start_el', $item_output, $item, $depth, $args );
    } 
}

Sonra wp_nav_menuişlevi şablon dosyalarından çağırmanız gerekir :

$arg = array( 
    'menu'        => "main-menu", 
    'echo'        => true, 
    'fallback_cb' => 'wp_page_menu', 
    'depth'       => 0, 
    'walker'      => new description_walker() 
); 
wp_nav_menu( $arg );

Bu kadar. Ardından arka uç menü bölümüne gidin.

Örneğin, sayfa URL'sini özel bir bağlantıya vermek isterseniz, bunu şu şekilde ekleyeceğim:

http://::blogurl-id='1302'::

Şimdi kullanıcı arabirimine gidebilir ve kısa kodun çalışıp çalışmadığını kontrol edebilirsiniz.

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.