Cara menambahkan Tautan Ubahsuaian ke Menu dengan URL yang relatif terhadap URL blog

16

Bagian dari pekerjaan saya adalah membuat situs web Wordpress. Saya biasanya mengerjakan laptop saya sampai saya memiliki sesuatu yang cukup bagus untuk diunggah ke server uji tempat klien meninjaunya.

Saya membuat VirtualHost untuk setiap proyek baru jadi saya selalu bekerja dengan instalasi Wordpress di domain yang terlihat seperti http://local.example.com/, tetapi ketika situs diunggah ke server uji (tidak dikendalikan oleh saya), domain tersebut mungkin berakhir seperti sesuatu http://testserver.com/arbitrary/path/example/.

Masalahnya adalah jika saya menambahkan tautan khusus ke menu yang menunjuk, misalnya, /events/itu akan berfungsi dengan baik secara lokal membuat tautan http://local.example.com/events/, tetapi di server pengujian, tautan tersebut akan mengarah ke http://testserver/events/, yang jelas tidak benar.
Yang saya inginkan adalah memberikan tautan khusus URL yang akan berfungsi baik pada lingkungan lokal saya dan server pengujian.

Saya sudah menangani masalah mengubah opsi homedan siteurlWordpress dengan:

  • mengubah pengaturan tersebut pada database lokal
  • membuat dump dari database
  • perbarui database di server
  • mengembalikan opsi lokal.

Saya tidak ingin menggunakan URL lengkap untuk tautan khusus dan harus menggantinya dengan URL server setiap kali saya perlu memperbarui database server.

Untuk tautan di dalam konten tulisan, ada sebuah plugin yang memecahkan masalah dengan menambahkan dua shortcode: http://wordpress.org/extend/plugins/url-shortcodes/ , tapi saya belum dapat menemukan sesuatu yang serupa untuk Tautan Kustom .

Willington Vega
sumber
5
Willington, aku tidak bisa membantumu ke url yang berfungsi di mana saja. Apa yang dapat saya lakukan adalah mengarahkan Anda ke spectacu.la/search-and-replace-for-wordpress-databases . Saya telah menggunakan pencarian David & ganti untuk beberapa waktu dan saya bekerja dengan baik untuk mengubah misalnya url - bahkan ketika dalam data serial. Jadi begitulah cara saya melakukannya: cukup tautan dan konversi yang dikonversi setelah memindahkan basis data ke domain lain. Semoga beruntung, Peter
Peter
Sejauh ini satu-satunya cara yang saya temukan untuk berhasil pindah dari lingkungan dev ke lingkungan hidup adalah setelah melakukan SQL dump untuk melakukan pencarian dan mengganti seluruh file, bukan hanya mengubah opsi home dan siteurl. Saya punya file di mana URL berada di sana lebih dari 1000 kali. (masih tidak tahu bagaimana itu bisa sampai setinggi itu :))
Rob Williams
@Peter, @Rob terima kasih sudah menjawab, saya takut pencarian dan penggantian adalah satu-satunya solusi tetapi ingin bertanya terlebih dahulu. Saya akan melihat skrip itu.
Willington Vega
Cara terbaik adalah menggunakan skrip seperti yang saya sarankan. Perhatikan bahwa pencarian teks & ganti dalam dump db akan mengacaukan data serial (terutama ditemukan di wp_options) jika dan ketika panjang pencarian dan mengganti string tidak sama, karena data tersebut disimpan dalam db dengan spesifikasi panjang . Sukses, Peter
Peter

Jawaban:

9

Saya juga mencari solusi untuk ini dan saya menemukan yang sederhana.

Inilah yang perlu Anda tempatkan di bidang URL:

/index.php/internal-site-name

masukkan deskripsi gambar di sini

Ini bekerja dengan baik!

Salam, Chris

Christian Hatz
sumber
1
Ini berfungsi tetapi itu juga mengubah url untuk memasukkan index.php. Dalam hal aplikasi halaman tunggal dengan # tautan, ini akan menyegarkan halaman pertama dan kemudian membawa Anda ke tujuan (hanya yang pertama kali). Meski begitu, ide yang bagus
Catalin Deaconescu
Saya menggunakan / sesuatu tanpa bagian index.php dan tampaknya berfungsi
user3808307
4

Anda dapat menggunakan nav_menu_link_attributesfilter untuk memeriksa dan memodifikasi atribut href untuk setiap item menu sebelum hasilnya.

Dalam contoh ini, kami mencari atribut href yang diawali dengan a /, dan menambahkan URL situs uji dalam hal itu:

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

Anda bisa membuat plugin sederhana dengan kode ini dan mengaktifkannya hanya di server pengujian Anda, atau membuat semacam flag yang secara kondisional menerapkan filter ini ketika lingkungan situs pengujian hadir.

Milo
sumber
Itulah cara terbaik yang saya temukan! Tapi tolong @Milo, ubah baris ketiga dengan url basis wordpress yang lebih pintar ini (dapatkan di site_url dari wordpress): $ atts ['href'] = site_url (). $ atts ['href'];
gtamborero
2

Menggunakan <base href=" ">tag di meta kepala akan memberikan url dasar ke semua jangkar relatif di halaman.

Referensi:
https://www.w3.org/TR/html4/struct/links.html
12.4 Informasi jalur: elemen BASE

Tautan khusus relatif di wordpress:
Jika Anda ingin url situs menjadi url dasar semua jangkar, tambahkan ini ke tema / header.php di dalam <head>:

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

saya tahu bisa terlambat untuk Anda tetapi bisa membantu orang lain.

David Pacheco
sumber
Terlihat menjanjikan. Saya akan mengujinya dan melaporkan kembali.
Eric Hepperle - CodeSlayer2010
Tidak berfungsi dengan jalur seperti ehepperle.com/sites/in-progress/some-wp-site-root/kecuali jika Anda secara eksplisit mengatur root situs. Kecepatan pengembangan web tidak meningkat secara signifikan menggunakan basetag, karena ketika Anda bermigrasi ke situs lain, Anda harus mendefinisikan kembali apa itu basis. Namun, saya bisa melihat nilai dalam mengurangi panjang nilai href.
Eric Hepperle - CodeSlayer2010
Ide bagus tapi sepertinya Wordpress mengabaikan jalur Base saat menggunakan jalur relatif pada menu kustom wp (misalnya: / kontak)
gtamborero
1

Pada URL khusus dalam pengaturan Menu dimungkinkan untuk menggunakan tautan relatif ke [blogurl]. Rahasianya adalah memulai URL relatif dengan satu /. Ketika satu / memulai URL khusus, sistem tidak akan menambahkan awal khas http://dan kemudian blogURL saat ini akan dihasilkan dalam URL target pada waktu eksekusi.

CONTOH
Jika Anda ingin membuka beranda, cukup cantumkan /sebagai URL khusus

Jika Anda ingin pergi ke halaman indeks di folder bbforumskemudian masukkan /bbforumssebagai URL khusus.

Ini memungkinkan Anda untuk memindahkan situs ke domain uji coba tanpa harus menyulitkan blogURL baru di semua tautan khusus untuk menu.

Sebagai Contoh:
Jika blog saya http://example.comdan saya ingin mengujinya di subdomain http://test.example.comsitus dapat dipindahkan antara pengujian dan produksi tanpa masalah menu menggunakan konvensi URL relatif yang disebutkan di atas. Saya telah berhasil menguji pendekatan ini menggunakan plugin XCloner untuk memindahkan situs.

pengguna41251
sumber
6
Ini tidak berfungsi untuk URL blog yang memiliki garis miring, misalnya example.com/blog . Mengikuti item menu '/' hanya akan membawa Anda ke example.com .
Jimpanzee
1

Pertama, Anda harus menginstal plugin ini untuk shortcode URL.

Tambahkan kode ini ke functions.phpfile Anda di tema Anda:

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

Maka Anda harus memanggil wp_nav_menufungsi dari file template:

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

Itu dia. Lalu pergi ke bagian menu back-end.

Misalnya, jika saya ingin memberikan URL halaman ke tautan khusus, saya akan menambahkannya seperti ini:

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

Sekarang Anda dapat pergi ke front-end dan memeriksa apakah kode pendek berfungsi.

Manimaran
sumber