Rozwiązanie do renderowania skrótów w Admin Editor


19

Zadałem to pytanie około roku temu i mam nadzieję, że istnieje jakieś proste rozwiązanie, które pozwoli mi osiągnąć cel. A więc oto:

Często używam skrótów w Edytorze administracyjnym, ale kiedy przekazuję to klientowi, często nie rozumieją, jak działają.

To, czego szukam, to rozwiązanie, które po prostu automatycznie renderuje skojarzone dane wyjściowe skrótów w administracyjnym edytorze WYSIWYG.

Z wizualnego punktu widzenia chciałbym, aby wyświetlało się podobnie do tego, kiedy pojawia się linia „więcej” lub gdy obraz jest wyświetlany w edytorze. Rozumiem przez to, że użytkownik zobaczy wynik, ale będzie mógł go tylko usunąć, ale nie będzie mógł edytować treści renderowanego skrótu.


Czy przeczytałeś ten ( wp.tutsplus.com/tutorials/theme-development/… ) artykuł? Sprawdź część TinyMCE.
— cr0z3r

1
Przeczytałem to, ale, o ile mogę to powiedzieć, zajmuje się tylko tworzeniem / rejestrowaniem krótkich kodów i tworzeniem przycisków dla edytora, aby szybko wstawiać krótkie kody ... Ale nie ma informacji na temat renderowania tych krótkich kodów z odpowiednikami bloków HTML, jak to opisałem.
— NetConstructor.com,

Czy masz na myśli, że chcesz dołączyć pomoc wizualną reprezentatywną dla dowolnego włączonego kodu, a nie zastępować go kodem HTML? tzn. symbol zastępczy galerii, który w rzeczywistości nie jest kodem galerii, ale raczej wizualny symbol zastępczy, który informuje użytkownika: „Hej, tu jest galeria”?
— Matthew Boynes

Dokładnie! Chciałbym, aby był nieco elastyczny, co pozwala mi dostosowywać go na podstawie
— krótkiego kodu

Odpowiedzi:


19

Robienie tego, o co prosisz, nie jest wcale takie złe. Wykonanie pierwszego powinno zająć około godziny, a kolejne 10 minut.

Ostatecznie, co zamierzasz zrobić, to stworzyć wtyczkę TinyMCE. Oto, co powinieneś uzbroić, aby rozpocząć:

  1. Ogólny przewodnik po tworzeniu wtyczki tinymce
  2. Przykładowy kod z WordPress Core
  3. Ogólny przewodnik po dodawaniu wtyczki TinyMCE do WordPress. Znalazłem ten , który wydaje się odpowiedni.

Masz teraz wszystkie narzędzia do zrobienia! Ze wszystkich tego najbardziej interesujący będzie kod w tym bloku w przykładowym kodzie WP:

4   function replaceGalleryShortcodes( content ) {
5       return content.replace( /\[gallery([^\]]*)\]/g, function( match ) {
6           return html( 'wp-gallery', match );
7       });
8   }
9
10  function html( cls, data ) {
11      data = window.encodeURIComponent( data );
12      return '<img src="' + tinymce.Env.transparentSrc + '" class="wp-media mceItem ' + cls + '" ' +
13          'data-wp-media="' + data + '" data-mce-resize="false" data-mce-placeholder="1" alt="" />';
14  }

Tutaj skrót do galerii zostaje zastąpiony imgtagiem. imgTag ma klasę wp-gallery, która zostanie zaprojektowany przez CSS znaleźć tutaj .

Edytuj 2016-04-06: Zaktualizowano zawartość i linki do TinyMCE 4 i WordPress 4.4


ciekawy! pozwól, że cię zapytam ... co sądzisz o tym, że rzeczywista treść wszystkich skrótów jest automatycznie konwertowana na powiązaną treść?
— NetConstructor.com

To wszystko zależy od treści. Po pierwsze, pamiętaj, że część HTML zostaje rozebrana, ma problemy z renderowaniem w TinyMCE itp. Po drugie, powiedzmy, że twój shortcode renderuje blok złożonego HTML - jeśli użytkownik poszedłby go edytować, mógłby przypadkowo go przerwać. Po trzecie, jeśli twój shortcode zawiera opcje, opcje te stają się teraz nieedytowalne, chyba że zabijesz cały blok HTML i powtórzysz shortcode. Możliwe, że jeśli Twój kod jest na tyle skomplikowany, że potrzebujesz krótkiego kodu, myślę, że symbol zastępczy jest najlepszym wyborem.
— Matthew Boynes

Czy zdarzyło Ci się kiedyś znaleźć rozwiązanie w tej sprawie?
— NetConstructor.com,

0

To nie jest pełna odpowiedź, tylko kierunek projektowania. Myślę, że najlepszym podejściem jest coś takiego:

W edytorze posta administratora

Zerwij wszystkie skróty z zapisanego postu i wyrenderuj je w metaboksie oprócz edytora . Upewnij się, że pojawiają się w tej samej kolejności, w jakiej występują krótkie kody w małym edytorze.

W tinyMCE javascript API

Wykonaj funkcję jQuery, gdy użytkownik kliknie krótki kod, zamienia HTML z metaboksu do edytora. I wzajemnie. Sama kolejność powinna być odpowiednia jako skojarzenie, ale nie jestem pewien, czy załączać krótkie kody. Istnieje jednak wiele sposobów zaprojektowania ładnego połączenia ID. Aktualizacji skrótów można dokonywać w locie za pomocą ajax.

Nigdy nie zapisuj renderowanego stanu shortcode

Przed przełączeniem edytorów zapisz wersje robocze, automatyczne wersje robocze i opublikuj, wykonaj wywołanie API, aby uruchomić przywracanie, aby renderowany stan krótkiego kodu nigdy nie został zapisany ...

Można to zrobić, ale musisz być zaznajomiony z interfejsem API tinyMCE, aby zrozumieć, gdzie i kiedy uzyskać dostęp do zawartości edytora, i podłączyć czynności javascript przed „zapisz” i więcej.

Może być kilka edytorów tinyMCE w tym samym edytowaniu postu.

Część przywracania można zbadać, patrząc na zachowanie [gallery]krótkiego kodu. Ale kliknięcie [MY_SHORTCODE]musi zostać wykonane przez kilka sztuczek jQuery.

w skrypcie admin_footer uzyskaj dostęp do zawartości aktywnego kursora za pomocą:

var $editor_content = $(tinymce.activeEditor.getBody());

jest wskazówką jak zacząć.


0

Szukałem też sposobu graficznego wyświetlania i poprawiania skrótów. A teraz w końcu znalazłem samouczek, który dokładnie to robi: https://generatewp.com/take-shortcodes-ultimate-level/

Zrzut ekranu

Dodam opis, aby wyszukiwarki go podniosły:

Stworzymy prostą wtyczkę z krótkim kodem, a następnie dodamy przycisk edytora TinyMCE, aby wstawić ten kod przez wyskakujące okienko, które zbierze wszystkie dane wejściowe użytkownika dotyczące atrybutów shortcode. Następnie zastąpimy krótki kod w edytorze TinyMCE obrazem zastępczym, podobnie jak natywna galeria WordPress (która w rzeczywistości jest krótkim kodem, jeśli nie wiesz), i na koniec - pozwolimy na edycję krótkiego kodu i jego atrybutów, klikając dwukrotnie obraz zastępczy.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.