Cara mendapatkan URL cantik dengan add_query_arg di permalinks

8

Dengan add_query_arg()itu bagus untuk menambahkan parameter tambahan ke URL dan juga mudah untuk membuat aturan penulisan ulang. Sejauh ini bagus. Tetapi masalahnya adalah penggantian URL dilakukan oleh wordpress.

Ketika saya memiliki URL, seperti:

www.mysite.com/?page_id=1&myvar=test

dan saya mengetik URL ini ke baris alamat browser dengan permalink yang diaktifkan. Tautan ini akan menjadi ke:

www.example.com/pagename/?myvar=test

TETAPI : apa yang ingin saya dapatkan adalah:

www.example.com/pagename/test

Akhirnya, saya ingin menggunakan kode seperti:

<a href="<?php add_query_arg( 'myvar', 'test', get_permalink() ) ?>"> .... </a>

yang akan menghasilkan:

www.example.com/pagename/test

Bagaimana ini bisa dicapai? Saya menghabiskan waktu berjam-jam membaca dokumen dan saya tidak dapat menemukan solusi.

pengguna3114592
sumber
1
Saya ingin tahu bagaimana ini dilakukan. Memberi +1 pada pertanyaan.
henrywright

Jawaban:

5

Hanya menghadapi situasi yang sama dan menemukan pertanyaan ini sambil googling.

Sepertinya ini tidak mungkin. Core sendiri hanya menambahkan string ke URL jika permalink cantik diaktifkan, lihat https://core.trac.wordpress.org/browser/tags/3.9.1/src/wp-includes/link-template.php#L571

Bagi siapa pun yang tertarik dengan ini: Anda dapat melakukan sesuatu seperti ini dalam kode Anda:

if ( '' != get_option('permalink_structure') ) {
    // using pretty permalinks, append to url
    $read = user_trailingslashit( get_permalink() . 'test' ); // www.example.com/pagename/test
  } else {
    $read = add_query_arg( 'test', '', get_permalink() ); // www.example.com/pagename/?test
  }

Solusi ini juga direkomendasikan oleh Jon Cave dalam komentar di blog resmi: https://make.wordpress.org/plugins/2012/06/07/rewrite-endpoints-api/#comment-686

swissspidy
sumber
0

WordPress tidak akan membiarkan Anda melakukan ini dengan mudah. Faktanya, aturan penulisan ulang adalah satu-satunya pilihan Anda untuk mencapai hal semacam ini di WordPress dan aturan penulisan ulang WordPress bisa menjadi sangat berantakan ketika situs Anda tumbuh karena plugin dan tema (dan Anda juga) dapat menambahkan aturan penulisan ulang kustom di atas aturan yang ada di (multi ) instalasi situs.

Solusi @swissspidy akan berfungsi jika Anda sudah memiliki aturan penulisan ulang untuk kunci Anda (myvar) dan menggunakan permalinks dalam kondisi pertama dan kemudian mundur ke string kueri tradisional tanpa adanya kondisi tersebut. Solusi @Johnathan Joosten menunjukkan bagaimana aturan penulisan ulang menjadi sangat kompleks di WordPress (bayangkan melakukan itu untuk semua kunci dan nilai string kueri Anda ...)

Saya bertemu masalah ini beberapa kali sebelumnya ketika mengerjakan beberapa proyek menengah untuk klien saya dan saya dapat mencapai sesuatu yang serupa menggunakan plugin yang disebut Obfusquer. Menurut situs web, ini menutupi semua string kueri WordPress dengan kunci rahasia yang ditentukan pengguna dan juga menyediakan kait untuk persyaratan khusus tingkat lanjut.

Lucu, itu tidak terdaftar di repositori plugin WordPress, dan saya pikir Anda akan perlu berlangganan (yang saya pikir sangat terjangkau karena 1 lisensi tunggal akan bekerja bahkan dalam instalasi multisite) tetapi di sini ada tautan ke sana jika Anda perlu menutupi / sembunyikan string permintaan di instalasi WordPress. Mereka juga memiliki dokumentasi di sini .

Saya sekarang menggunakan plugin di hampir semua proyek wordpress saya, semoga membantu kebutuhan Anda. Bersulang.

Ramos Abdellaziz
sumber
-1

Solusi Wordpress adalah menambahkan aturan penulisan ulang untuk membuat sesuatu seperti ini:

    add_action( 'init', 'my_rewrite_add_rewrites' );
    function my_rewrite_add_rewrites()
    {
        add_rewrite_rule( 'calendar/([0-9]{4})/?$', 'index.php?post_type=events&year=$matches[1]', 'top' );
        add_rewrite_rule( 'calendar/([0-9]{4})/page/?([0-9]{1,})/?$', 'index.php?post_type=events&year=$matches[1]&paged=$matches[2]', 'top' );
    }

baca lebih lanjut: https://codex.wordpress.org/Rewrite_API/add_rewrite_rule

Jonathan Joosten
sumber
1
Anda seharusnya membuatnya lebih rumit untuk menurunkannya ...
Vishal Kumar Sahu