Comment utiliser wpLink sans éditeur?

11

Je voudrais créer une option de thème pour ajouter un lien. Le chargement de ces scripts et le déclenchement de la boîte de dialogue fonctionnent correctement si l'éditeur wp est présent.

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

mais comment faire pour ouvrir la boîte de dialogue de lien sans éditeur présent?

C'est ce que je recherche

entrez la description de l'image ici entrez la description de l'image ici

Benn
la source
2
Tout est assez étroitement lié à l'éditeur, la boîte de dialogue de lien est construite par une méthode de la classe editor et le script qui l'invoque a besoin d'une instance d'éditeur.
Milo
que voulez-vous dire sans l'éditeur? où veux-tu l'avoir?
Pmpr
@Trix dans les paramètres de thème
Benn
Vous feriez mieux de créer le vôtre ou d'utiliser quelque chose comme le champ de relation de Custom Custom Field: advancedcustomfields.com/resources/relationship ou le champ de relation de Custom Field Suite: docs.customfieldsuite.com/field-types/relationship.html
MikeNGarrett

Réponses:

7

Il n'y a pas de manière éthique de procéder. Mais il y a toujours un moyen de le faire. WordPress a écrit le script wpLink en gardant à l'esprit que l'éditeur est là mais qu'il gère toujours WordPress lorsque l'éditeur n'est pas là (Good Thing)

Considérez cet exemple et supposez que nous l'utilisons sur le front-end dans le pied de page.

Mettez d'abord en file d'attente le style et les scripts essentiels.

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

Accrochez maintenant cette fonction en pied de page Lisez les commentaires en ligne

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

Remarque: Cela ne fonctionnera pas lorsque l'utilisateur n'est pas connecté car l'erreur js setUserSettingn'est pas définie et aucune réponse AJAX lorsque l'utilisateur n'est pas connecté.

Sumit
la source
D'une manière ou d'une autre, tout cela fonctionnait plus tôt sans le _WP_Editorscode, et il s'est cassé. Votre réponse a sauvé la journée - merci!
random_user_name