Como usar o wpLink sem editor?

11

Gostaria de criar uma opção de tema para adicionar um link. Carregar esses scripts e acionar a caixa de diálogo funcionará bem se o editor wp estiver 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;
});

mas como abrir a caixa de diálogo de link sem a presença do editor?

É isso que eu estou procurando

insira a descrição da imagem aqui insira a descrição da imagem aqui

Benn
fonte
2
Está tudo muito ligado ao editor, a caixa de diálogo de link é criada por um método da classe editor e o script que o chama precisa de uma instância do editor.
Milo
o que você quer dizer sem o editor? onde você quer tê-lo?
Pmpr
@Trix nas configurações de tema
Benn
É melhor criar o seu próprio ou usar algo como o campo de relacionamento do Advanced Custom Field: advancedcustomfields.com/resources/relationship ou o campo de relacionamento do Custom Field Suite: docs.customfieldsuite.com/field-types/relationship.html
MikeNGarrett

Respostas:

7

Não existe uma maneira ética de fazer isso. Mas ainda há uma maneira de fazer isso. O WordPress escreveu o script wpLink, tendo em mente que o editor está lá, mas ainda assim o WordPress manipula quando o editor não está lá (Good Thing)

Considere este exemplo e assuma que o estamos usando no front-end no rodapé.

Primeiro, enfileire o estilo e os scripts essenciais.

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

Agora conecte esta função no rodapé Leia os comentários embutidos

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: Ele não funcionará quando o usuário não estiver conectado devido ao erro js setUserSettingnão estar definido e nenhuma resposta AJAX quando o usuário não estiver conectado.

Sumit
fonte
De alguma forma, eu tinha tudo isso funcionando mais cedo sem o _WP_Editorscódigo, e ele quebrou. Sua resposta salvou o dia - obrigado!
Random_user_name