Jak uciec od „]” w krótkim kodzie?

17

Jak mogę uciec od prawego nawiasu za pomocą krótkiego kodu?

Pracuję nad wtyczką Google Map, która ma zakodowane punkty. Czasami wielokąty zawierają], co sprawia, że ​​WP myśli, że to koniec krótkiego kodu.

Na przykład:

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

Próbowałem, ]co nie powoduje problemów z WP, ale powoduje problem z moim kodem mapy Google. Przydałaby mi się Regex], ale może jest prostszy sposób. Czy shortcode ma znak zmiany znaczenia?

Laxmidi
źródło

Odpowiedzi:

18

Nie znam oficjalnej składni ucieczki dla skrótów i prawdopodobnie nie ma takiej.

Kiedy Wordpress analizuje skróty, szuka [ i ] . Jeśli chcesz użyć nawiasów kwadratowych w obrębie krótkiego kodu , użycie odpowiednich znaków HTML ASCII powoduje ich uniknięcie .

Czyli zastępując [ przez [i ] przez ]. Wordpress nie rozpoznaje ]końca kodu krótkiego.

To, czy służy to twojemu celowi, zależy oczywiście od tego, czy zostanie ono przekonwertowane na ] przed przekazaniem do interfejsu API Map Google lub czy interfejs API obsługuje go zgodnie z oczekiwaniami. Nie mam z tym doświadczenia, więc nie mogę powiedzieć.

Johannes Pille
źródło
Dziękuję za odpowiedź. W swoim pytaniu zapomniałem wpisać „& # 93;” w bloku kodu, więc wyszedł jako „]”. Zredagowałem moje pytanie. Encja HTML działa dla WP, ale nie dla Map Google. Będę musiał użyć Regex do zastąpienia jednostek HTML. Dziękuję bardzo za pomoc.
Laxmidi,
@Laxmidi Moje powyższe „zgadnij”, że nie ma pewności, że postać ucieczki graniczy z pewnością - po prostu chciałem zachować ostrożność, aby nie podawać fałszywych informacji. Jeśli tak, jestem pewien, że artykuł kodeksu na temat Shortcode API wspomniałby o tym. Myślę, że późniejsza wymiana jest najlepszym rozwiązaniem. Czy potrzebujesz wyrażenia regularnego dla jednej postaci? Myślę, że str_replace()należy również wykonać tę pracę. Gdyby tak było, byłoby to mniej wymagające zasobów.
Johannes Pille,
1
@JohannesPille cześć, to oldie, ale muszę też zastąpić [] symbolem & # 93 ;. Za pierwszym razem oszczędzasz w WP i działa, ale podczas edycji posta / strony WP zmienia się & # 93; w ]. (potrzebujesz tego do śledzenia zdarzeń Google na przyciskach shortcode) pozdrawiam
alex
Jak powiedział @alex, jeśli przełączysz się na kartę wizualną i wrócisz do karty kodu, zobaczysz, że tinyMCE zmienia znaki specjalne z powrotem na [], a następnie łamie kod.
Saulo Padilha
tinyMCE jest Javascript i jest wtykany. Spójrz na wpse / pytania / 223677 / added-custom-text-patterns-in-the-wp-4-5-visual-editor . @alex
Johannes Pille,
2

Na podstawie odpowiedzi Johannesa Pille'a jest funkcja wp, aby uciec od nawiasów kwadratowych w celu użycia tekstu w parametrach shortcode:

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

Często ludzie sugerują użycie treści $ shortcode dla parametrów tekstowych, ale zdarzają się przypadki, gdy shortcode ma wiele takich parametrów tekstowych.

DocSS
źródło
2

Wydaje się, że jest tu oficjalna strona: Uciekające skróty

Wyciąg :

Aby to zrobić, musisz uciec przed krótkim kodem, używając dwóch zestawów nawiasów zamiast jednego. Aby wyświetlić to w swoim poście:

[Galeria]

Napisałbyś to:

[[Galeria]]

Guillaume Husta
źródło
0

Nawet jeśli NIE bawisz się adresem URL, użyj kodu urld (wartość_atrybutu) z% 5B i% 5D jako zamiennikiem [i] w wartości_atrybutu.

Twój kod może wtedy wyglądać następująco:

Na stronie wp: [my_shortcode myattr="%5Bmyattribute_value%5D"]

Następnie w funkcji krótkiego kodu wykonaj następujące czynności:

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

Spowoduje to przywrócenie znaków [i] z $ origvalue, tak że $ origvalue zawiera teraz: [myattribute_value]

WSKAZÓWKA: Jeśli grasz za pomocą adresu URL, zrób to samo, ale dodaj do kodu funkcji:

$urlvalue = urlencode($origvalue);

Jeśli to nie jest jasne: TAK, robię urlencode (urldecode (pewna wartość z $ atts)), aby zbudować poprawną część adresu URL.

Po prostu mam nadzieję, że to pomoże.

Pierre

Pierre13fr
źródło
-1

To stare pytanie, ale oto obejście tego problemu za pomocą css. Zamiast nawiasów klamrowych umieść postacie w rozpiętości, tak jak poniżej:

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

następnie dodaj to do arkusza stylów motywu:

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

wynik będzie wyglądał następująco:

[some string]

Yitwail
źródło
3
Pytanie dotyczy wstawiania ]jako części treści, a nie sposobu jej wyświetlania.
Mark Kaplun,