Jak korzystać z wpLink bez edytora?

11

Chciałbym utworzyć opcję motywu, aby dodać link. Ładowanie tych skryptów i uruchamianie okna dialogowego działa poprawnie, jeśli jest dostępny edytor wp.

wp_enqueue_script('wplink');
wp_enqueue_script('wpdialogs');
wp_enqueue_script('wpdialogs-popup');
wp_enqueue_style('wp-jquery-ui-dialog');
wp_enqueue_style('thickbox');

wp_editor('', 'unique_id', array('editor_class'=>'hidden'));



$('.add-link').on("click", function(e){
    e.preventDefault();

      wpLink.open();
      return false;
});

ale jak to zrobić, aby otworzyć okno dialogowe łącza bez edytora?

Po to właśnie jestem

wprowadź opis zdjęcia tutaj wprowadź opis zdjęcia tutaj

Benn
źródło
2
Wszystko jest dość ściśle powiązane z edytorem, okno dialogowe linku jest budowane metodą klasy edytora, a skrypt, który go wywołuje, potrzebuje instancji edytora.
Milo
co masz na myśli bez edytora? gdzie chcesz to mieć?
Pprpr
@Trix w ustawieniach motywu
Benn
Lepiej zbuduj własne lub skorzystaj z czegoś takiego jak pole relacji Advanced Custom Fields : advancedcustomfields.com/resources/relationship lub pole relacji Custom Field Suite: docs.customfieldsuite.com/field-types/relationship.html
MikeNGarrett

Odpowiedzi:

7

Nie ma etycznego sposobu na zrobienie tego. Ale wciąż jest na to sposób. WordPress napisał skrypt wpLink, pamiętając, że edytor jest, ale nadal obsługuje WordPress, gdy edytor nie istnieje (Dobra rzecz)

Rozważ ten przykład i załóż, że używamy go w przedniej stopce.

Najpierw uporządkuj niezbędny styl i skrypty.

function enqueue_scripts_209490() {
    wp_enqueue_script('wplink');
    wp_enqueue_style( 'editor-buttons' );
}
add_action('wp_enqueue_scripts', 'enqueue_scripts_209490');

Teraz zaczep tę funkcję w stopce. Przeczytaj wbudowane komentarze

function display_wplink_html_209490() {
    //Our textarea, click to open the link edior and insert the link in same editor
    echo '<textarea id="example_209490"></textarea>';

    // Require the core editor class so we can call wp_link_dialog function to print the HTML.
    // Luckly it is public static method ;)
    require_once ABSPATH . "wp-includes/class-wp-editor.php";
    _WP_Editors::wp_link_dialog(); ?>

    <script type="text/javascript">
        /* We need ajaxurl to send ajax to retrive links */
        var ajaxurl = "<?php echo admin_url( 'admin-ajax.php'); ?>";
        jQuery(document).ready(function (){
            jQuery('#example_209490').click(function (){
                wpLink.open('example_209490'); /* Bind to open link editor! */
            });
        })
    </script><?php
}
add_action('wp_footer', 'display_wplink_html_209490');

Uwaga: Nie będzie działać, gdy użytkownik nie jest zalogowany, ponieważ błąd js setUserSettingnie został zdefiniowany i nie ma odpowiedzi AJAX, gdy użytkownik nie jest zalogowany.

Sumit
źródło
Jakoś miałem to wszystko działające wcześniej bez _WP_Editorskodu i to się zepsuło. Twoja odpowiedź uratowała dzień - dziękuję!
random_user_name