Wie benutzt man wpLink ohne Editor?

11

Ich möchte eine Themenoption erstellen, um einen Link hinzuzufügen. Das Laden dieser Skripte und das Auslösen des Dialogfelds funktioniert einwandfrei, wenn der WP-Editor vorhanden ist.

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;
});

Aber wie kann ich das Link-Dialogfeld öffnen, ohne dass ein Editor vorhanden ist?

Das ist es, wonach ich suche

Geben Sie hier die Bildbeschreibung ein Geben Sie hier die Bildbeschreibung ein

Benn
quelle
2
Es ist alles ziemlich eng mit dem Editor verbunden, der Link-Dialog wird von einer Methode der Editor-Klasse erstellt, und das Skript, das ihn aufruft, benötigt eine Editor-Instanz.
Milo
Was meinst du ohne den Editor? wo willst du es haben
Pmpr
@ Matrix in Themeneinstellungen
Benn
Sie sollten besser ein eigenes erstellen oder das Beziehungsfeld von Advanced Custom Field verwenden: advancedcustomfields.com/resources/relationship oder das Beziehungsfeld von Custom Field Suite: docs.customfieldsuite.com/field-types/relationship.html
MikeNGarrett

Antworten:

7

Es gibt keinen ethischen Weg, dies zu tun. Aber es gibt immer noch einen Weg, dies zu tun. WordPress hat ein wpLink-Skript geschrieben, wobei zu berücksichtigen ist, dass der Editor vorhanden ist, das WordPress-Handle jedoch weiterhin vorhanden ist, wenn der Editor nicht vorhanden ist (Good Thing).

Betrachten Sie dieses Beispiel und nehmen Sie an, dass wir es im Front-End in der Fußzeile verwenden.

Stellen Sie zuerst den wesentlichen Stil und die Skripte in die Warteschlange.

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

Hängen Sie diese Funktion jetzt in die Fußzeile ein. Lesen Sie die Inline-Kommentare

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');

Hinweis: Es funktioniert nicht, wenn der Benutzer nicht angemeldet ist, da der Fehler js setUserSettingnicht definiert ist, und keine AJAX-Antwort, wenn der Benutzer nicht angemeldet ist.

Sumit
quelle
Irgendwie funktionierte das alles früher ohne den _WP_EditorsCode und es brach. Ihre Antwort hat den Tag gerettet - danke!
cale_b