Bagaimana cara saya menghindari ']' dalam kode pendek?

17

Bagaimana cara saya keluar dari braket yang tepat dalam kode pendek?

Saya sedang mengerjakan plugin Google Map yang memiliki titik-titik yang disandikan. Terkadang poligon memiliki] di dalamnya, yang membuat WP berpikir bahwa itu adalah akhir dari shortcode.

Sebagai contoh:

[my_shortcode latitude='36.93'  longitude='-72.98' encoded_points='ortlF~g]tM?cZEH`z]}|@DQfi]' ]

Saya sudah mencoba ]yang tidak menyebabkan masalah untuk WP, tetapi menyebabkan masalah untuk kode peta Google saya. Saya bisa menggunakan Regex untuk menggantikan], tapi mungkin ada cara yang lebih sederhana. Apakah kode pendek memiliki karakter pelarian?

Laxmidi
sumber

Jawaban:

18

Saya tidak tahu sintaks pelarian resmi untuk kode pendek dan kemungkinan tidak ada.

Ketika wordpress mem-parsing untuk kode pendek, ia mencari [ dan ] . Jika Anda ingin menggunakan tanda kurung siku dalam kode pendek, menggunakan entitas html ASCII masing-masing lolos dari mereka.

Yaitu mengganti [ oleh [dan ] oleh ]. Wordpress tidak akan dikenali ]sebagai akhir dari shortcode.

Apakah itu sesuai dengan tujuan Anda jelas tergantung pada apakah dikonversi ke ] sebelum diteruskan ke Google Maps API atau apakah API menanganinya seperti yang diharapkan. Saya tidak punya pengalaman dengan itu, jadi tidak bisa mengatakannya.

Johannes Pille
sumber
Terima kasih atas jawabannya. Dalam pertanyaan saya, saya lupa meletakkan '& # 93;' dalam blok kode sehingga keluar sebagai ']'. Saya telah mengedit pertanyaan saya. Entitas HTML berfungsi untuk WP, tetapi tidak untuk Google Maps. Saya harus menggunakan Regex untuk menggantikan entitas HTML. Terima kasih banyak atas bantuannya.
Laxmidi
@Laxmidi My guess "" di atas bahwa tidak ada karakter melarikan diri berbatasan dengan kepastian - hanya ingin berhati-hati untuk tidak memberikan informasi yang salah. Jika ada, saya yakin artikel codex pada Shortcode API akan menyebutkannya. Saya pikir mengganti setelah itu adalah taruhan terbaik Anda. Apakah Anda memerlukan regex untuk satu karakter? Saya pikir str_replace()harus menyelesaikan pekerjaan juga. Akan kurang intensif sumber daya, jika itu terjadi.
Johannes Pille
1
@JohannesPille halo ini adalah oldie, tapi saya perlu [] juga diganti oleh & # 93 ;. Pertama kali menyimpan dalam WP dan berfungsi, tetapi ketika mengedit posting / halaman WP ternyata & # 93; menjadi]. (butuh ini untuk pelacakan acara google pada tombol kode pendek) salam
alex
Seperti kata @alex, jika Anda beralih ke tab visual dan kembali ke tab kode akan melihat bahwa tinyMCE mengubah karakter khusus kembali ke [], lalu memecah kode.
Saulo Padilha
tinyMCE adalah Javascript dan pluggable. Lihatlah wpse / pertanyaan / 223677 / menambahkan-custom-text-pattern-in-the-wp-4-5-visual-editor . @alex
Johannes Pille
2

Berdasarkan jawaban Johannes Pille ada fungsi wp untuk keluar dari tanda kurung siku untuk menggunakan teks dalam parameter kode pendek:

function my_esc_brackets($text = ''){
    return str_replace( [ "[" , "]" ] , [ "[" , "]" ] , $text );
}

Seringkali orang menyarankan menggunakan $ content shortcode untuk parameter teks, tetapi ada beberapa kasus ketika shortcode memiliki banyak parameter teks seperti itu.

DocSS
sumber
2

Tampaknya ada halaman resmi di sini: Melewati Shortcode

Ekstrak:

Untuk melakukan ini, Anda perlu menghindari kode pendek dengan menggunakan dua set tanda kurung, bukan hanya satu. Jadi untuk menampilkan ini di posting Anda:

[galeri]

Anda akan menulis ini:

[[galeri]]

Guillaume Husta
sumber
0

Bahkan jika Anda TIDAK bermain dengan url, gunakan urldecode (atribut_value Anda) dengan% 5B dan% 5D digunakan sebagai pengganti [dan] dalam atribut_value Anda.

Kode Anda kemudian akan terlihat seperti ini:

Di halaman wp Anda: [my_shortcode myattr="%5Bmyattribute_value%5D"]

Kemudian, dalam fungsi kode pendek Anda, lakukan ini:

 $origvalue=urldecode($atts['myattr']);

Ini akan mengembalikan karakter [dan] dalam $ origvalue, sehingga $ origvalue sekarang mengandung: [myattribute_value]

TIP: Jika Anda bermain dengan url, lakukan hal yang sama, tetapi tambahkan berikut ini ke kode fungsi:

$urlvalue = urlencode($origvalue);

Jika itu tidak jelas: YA, saya sedang melakukan urlencode (urldecode (beberapa nilai dari $ atts)) untuk membangun bagian url yang benar.

Cukup sederhana, semoga ini membantu.

Pierre

Pierre13fr
sumber
-1

Ini adalah pertanyaan lama, tapi ini solusinya menggunakan css. Di tempat kawat gigi, lampirkan karakter dalam rentang, seperti:

<span class="bracket">some string</span>

lalu, tambahkan ini ke stylesheet tema:

span.bracket:before {
  content: '['
}
.colored-blocks span.bracket:after {
  content: ']'
}

hasilnya akan terlihat seperti ini:

[some string]

yitwail
sumber
3
Pertanyaannya adalah tentang memasukkan ]sebagai bagian dari konten, bukan tentang bagaimana menampilkannya.
Mark Kaplun