Làm cách nào để thoát một ']' trong một mã ngắn?


17

Làm thế nào để tôi thoát một dấu ngoặc phải trong một mã ngắn?

Tôi đang làm việc trên một plugin Google Map có điểm được mã hóa. Đôi khi các đa giác có] trong đó, điều này khiến WP nghĩ rằng đó là sự kết thúc của shortcode.

Ví dụ:

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

Tôi đã thử ]không gây ra sự cố cho WP, nhưng nó gây ra sự cố cho mã bản đồ Google của tôi. Tôi có thể sử dụng Regex để thay thế], nhưng có lẽ có một cách đơn giản hơn. Shortcode có một ký tự thoát không?

Câu trả lời:


18

Tôi không biết một cú pháp thoát chính thức cho các mã ngắn và có khả năng không phải là một cú pháp.

Khi wordpress phân tích cú pháp cho shortcodes, nó sẽ tìm [] . Nếu bạn muốn sử dụng dấu ngoặc vuông trong một mã ngắn, sử dụng các thực thể ASCII html tương ứng thoát khỏi chúng.

Tức là thay thế [ bởi [] bởi ]. Wordpress sẽ không nhận ra ]là phần cuối của shortcode.

Việc phục vụ mục đích của bạn rõ ràng phụ thuộc vào việc nó có được chuyển đổi thành ] hay không trước khi được chuyển sang API Google Maps hoặc liệu API có xử lý như mong đợi hay không. Tôi không có kinh nghiệm với điều đó, vì vậy không thể nói.


Cảm ơn bạn đã trả lời. Trong câu hỏi của tôi, tôi đã quên đặt '& # 93;' trong một khối mã để nó xuất hiện dưới dạng ']'. Tôi đã chỉnh sửa câu hỏi của mình. Thực thể HTML hoạt động cho WP, nhưng không phải cho Google Maps. Tôi sẽ phải sử dụng Regex để thay thế các thực thể HTML. Cảm ơn bạn rất nhiều vì sự giúp đỡ.
Laxmidi

@Laxmidi "đoán" ở trên của tôi rằng không có nhân vật thoát khỏi biên giới chắc chắn - chỉ muốn thận trọng để không cung cấp thông tin sai. Nếu có, tôi tích cực bài viết codex về API Shortcode sẽ đề cập đến nó. Tôi nghĩ thay thế sau đó là đặt cược tốt nhất của bạn. Bạn có cần một regex cho một nhân vật không? Tôi nghĩ str_replace()nên hoàn thành công việc. Sẽ ít tốn tài nguyên hơn, nếu nó đã làm.
Julian Pille

1
@JohannesPille xin chào, đây là một oldie, nhưng tôi cần phải có [] cũng được thay thế bằng & # 93;. Lần đầu tiên lưu trong WP và nó hoạt động, nhưng khi chỉnh sửa bài đăng / trang WP sẽ bật & # 93; vào]. (cần điều này để theo dõi sự kiện google trên các nút shortcode) liên quan
alex

Như @alex đã nói, nếu bạn chuyển sang tab trực quan và quay lại tab mã sẽ thấy tinyMCE thay đổi các ký tự đặc biệt trở lại [], sau đó phá mã.
Saulo Padilha

tinyMCE là Javascript và có thể cắm. Hãy xem wpse / câu hỏi / 223677 / thêm-custom-text-samples-in-the-wp-4-5-visual-Editor . @alex
Pille

2

Dựa trên câu trả lời của Julian Pille, có chức năng wp để thoát dấu ngoặc vuông để sử dụng văn bản trong các tham số shortcode:

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

Mọi người thường đề xuất sử dụng nội dung $ của shortcode cho các tham số văn bản, nhưng có những trường hợp khi shortcode có nhiều tham số văn bản như vậy.


2

Dường như có một trang chính thức ở đây: Thoát khỏi Shortcodes

Trích xuất :

Để làm điều này, bạn cần thoát khỏi shortcode bằng cách sử dụng hai bộ dấu ngoặc thay vì chỉ một. Vì vậy, để hiển thị điều này trong bài viết của bạn:

[bộ sưu tập]

Bạn sẽ viết điều này:

[[bộ sưu tập]]


0

Ngay cả khi bạn KHÔNG chơi với url, hãy sử dụng urldecode (thuộc tính_value của bạn) với% 5B và% 5D được sử dụng để thay thế cho [và] trong thuộc tính_value của bạn.

Mã của bạn sau đó có thể trông như thế này:

Trong trang wp của bạn: [my_shortcode myattr="%5Bmyattribute_value%5D"]

Sau đó, trong chức năng shortcode của bạn, chỉ cần làm điều này:

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

Điều này sẽ khôi phục các ký tự [và] trong $ origvalue, để $ origvalue hiện chứa: [myattribute_value]

MIPO: Nếu bạn đang chơi với url, hãy làm tương tự, nhưng thêm đoạn mã sau vào mã chức năng:

$urlvalue = urlencode($origvalue);

Nếu điều đó không rõ ràng: CÓ, tôi đang thực hiện urlencode (urldecode (một số giá trị từ $ atts)) để xây dựng một phần chính xác của url.

Khá đơn giản, hy vọng điều này sẽ giúp.

Pierre


-1

Đây là một câu hỏi cũ, nhưng đây là một cách giải quyết bằng cách sử dụng css. Thay cho dấu ngoặc nhọn, đặt các ký tự trong một khoảng, như vậy:

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

sau đó, thêm phần này vào biểu định kiểu chủ đề:

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

kết quả sẽ như thế này:

[some string]


3
Câu hỏi là về việc chèn ]như một phần của nội dung, không phải về cách hiển thị nội dung đó.
Mark Kaplun
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.