¿Cómo usar wpLink sin editor?

11

Me gustaría crear una opción de tema para agregar un enlace. Cargar estos scripts y activar el diálogo funciona bien si el editor wp está presente.

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

pero ¿cómo hacer que abra el cuadro de diálogo de enlace sin que esté presente el editor?

Esto es lo que busco

ingrese la descripción de la imagen aquí ingrese la descripción de la imagen aquí

Benn
fuente
2
Todo está estrechamente vinculado al editor, el diálogo de enlace está construido por un método de la clase del editor, y el script que lo invoca necesita una instancia del editor.
Milo
¿Qué quieres decir sin el editor? ¿Dónde quieres tenerlo?
Pmpr
@Trix en la configuración del tema
Benn
Es mejor construir uno propio o usar algo como el campo de relación de Advanced Custom Field: advancedcustomfields.com/resources/relationship o el campo de relación de Custom Field Suite: docs.customfieldsuite.com/field-types/relationship.html
MikeNGarrett

Respuestas:

7

No hay una forma ética de hacer esto. Pero todavía hay una manera de hacer esto. WordPress escribió el script wpLink teniendo en cuenta que el editor está allí, pero aún así maneja WordPress cuando el editor no está allí (Buena cosa)

Considere este ejemplo y suponga que lo estamos usando en el front-end en el pie de página.

Primero ponga en cola el estilo y los guiones esenciales.

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

Ahora enganche esta función en el pie de página Lea los comentarios en línea

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

Nota: No funcionará cuando el usuario no haya iniciado sesión debido a que el error js setUserSettingno está definido y no habrá respuesta AJAX cuando el usuario no haya iniciado sesión.

Sumit
fuente
De alguna manera, todo esto funcionó antes sin el _WP_Editorscódigo, y se rompió. Su respuesta salvó el día, ¡gracias!
random_user_name