Làm cách nào tôi có thể sử dụng chức năng liên kết duyệt Wordpress trong trình duyệt Wordpress?


9

Tôi đang mã hóa một tiện ích và tôi muốn người dùng có thể chọn một liên kết như bạn có thể khi chỉnh sửa một bài đăng hoặc trang thông thường (khi bạn nhấp vào biểu tượng liên kết nhỏ và bạn có chức năng tìm kiếm AJAX trong cửa sổ bật lên ). Có ai biết làm thế nào tôi làm việc này? Tôi đã có một nút HTML mà tôi muốn đính kèm và nhấp vào, và một trường cho giá trị đi vào.

Trong class-wp-Editor.php tôi đã tìm thấy một vài điều thú vị và tự hỏi liệu tôi có thể cần những tệp này không ..?

wp_enqueue_script('wp-fullscreen');
wp_enqueue_script('wplink');

Khi gọi fullscreen.link();, như tập tin được đề cập ở trên, tôi gặp lỗi này:

Uncaught ReferenceError: wpActiveEditor is not defined

..và bây giờ tôi đã bối rối, bởi vì JS tham chiếu biến đó có vẻ điên rồ với tôi.

Quan tâm để chỉ cho tôi đi đúng hướng? Tôi rất thích làm việc này, nó sẽ tạo giao diện người dùng giết người cho các vật dụng của tôi!

nhập mô tả hình ảnh ở đây

------biên tập-------

Không có nhiều mã cho đến nay, ngoài các tập lệnh bao gồm mà tôi đã nêu trước đây;

<label for="<?php echo $this->get_field_name('link'); ?>">Link URL (including http://) : </label>
<input type="text" id="<?php echo $this->get_field_id('link'); ?>" name="<?php echo $this->get_field_name('link'); ?>" value="<?php if(isset($link)) echo esc_attr($link); ?>" class="widefat" />
<button class="secondary" id="choose_link">Link Browser</button>

.. một phần của JS được cho là kích hoạt tập lệnh liên kết để mở;

linkBrowserButton.on("click", function(e){
    e.preventDefault();
    fullscreen.link();
});

3
Vui lòng tạo ảnh chụp màn hình hoặc GIF động ( LiceCap là một công cụ đẹp và miễn phí) về những gì bạn muốn làm. Khó có thể tưởng tượng cho đến nay. Và hãy làm cho nó một chỉnh sửa và không bình luận. Cảm ơn.
kaiser

@kaiser - Ok, xong rồi. Bây giờ bạn sẽ thấy chức năng của tôi. PS - yêu LICEcap, cảm ơn vì tiền boa!
Dan

Vâng, sau đó xin vui lòng cho chúng tôi xem mã widget của bạn (phần xây dựng nội dung). Bạn đã sử dụng wp_editor()?
kaiser

@kaiser - Một số mã bổ sung được thêm vào. Cách đây không xa nhưng tôi không mong đợi làm gì khác ngoài việc đính kèm một sự kiện và bao gồm tập lệnh (có thể sửa đổi nơi kết quả được cập nhật), nhưng cho đến nay tôi không thể mở cửa sổ bật lên.
Dan

1
Thật không may, trình chọn liên kết được viết riêng cho trình soạn thảo TinyMCE. Tôi đang làm việc trên một phiên bản độc lập và có khoảng 80% ở đó. Về cơ bản, nó là một bản viết lại của trình chọn liên kết mà không phụ thuộc TinyMCE.
hereswhatidid

Câu trả lời:


2

Tôi gọi đối thoại liên kết trong lớp metabox mà tôi sử dụng để phát triển. Đó là một chút hacky nhưng có thể được thực hiện, cho đến khi một cái gì đó mạnh mẽ hơn được phát triển.

Bạn có thể gọi hộp liên kết bằng cách trước tiên liệt kê các js cần thiết, sau đó tương tác với các phương thức tệp js-link js.

Hãy chắc chắn rằng bạn đã yêu thích wp-link

1 / wp_enqueue_script( 'wp-link' );

2 / Thiết lập ui của bạn. Tôi thường sử dụng một nút để gọi đối thoại liên kết từ và một trường văn bản để xử lý URL liên kết.

3 / Gọi đối thoại liên kết

var _link_sideload = false; //used to track whether or not the link dialogue actually existed on this page, ie was wp_editor invoked.

var link_btn = (function($){
'use strict';
var _link_sideload = false; //used to track whether or not the link dialogue actually existed on this page, ie was wp_editor invoked.

/* PRIVATE METHODS
-------------------------------------------------------------- */
//add event listeners

function _init() {
    $('body').on('click', '.lm-link-button', function(event) {
        _addLinkListeners();
        _link_sideload = false;

        var link_val_container = $('#your_input_field');

        if ( typeof wpActiveEditor != 'undefined') {
            wpLink.open();
            wpLink.textarea = $(link_val_container);
        } else {
            window.wpActiveEditor = true;
            _link_sideload = true;
            wpLink.open();
            wpLink.textarea = $(link_val_container);
        }
        return false;
    });

}

/* LINK EDITOR EVENT HACKS
-------------------------------------------------------------- */
function _addLinkListeners() {
    $('body').on('click', '#wp-link-submit', function(event) {
        var linkAtts = wpLink.getAttrs();
        var link_val_container = $('#your_input_field');
        link_val_container.val(linkAtts.href);
        _removeLinkListeners();
        return false;
    });

    $('body').on('click', '#wp-link-cancel', function(event) {
        _removeLinkListeners();
        return false;
    });
}

function _removeLinkListeners() {
    if(_link_sideload){
        if ( typeof wpActiveEditor != 'undefined') {
            wpActiveEditor = undefined;
        }
    }

    wpLink.close();
    wpLink.textarea = $('html');//focus on document

    $('body').off('click', '#wp-link-submit');
    $('body').off('click', '#wp-link-cancel');
}

/* PUBLIC ACCESSOR METHODS
-------------------------------------------------------------- */
return {
    init:       _init,
};

})(jQuery);


// Initialise
jQuery(document).ready(function($){
 'use strict';
 link_btn.init();
});

4 // kịch bản enqueue. Thêm phần sau vào tệp tin.php của bạn và điều chỉnh tên / đường dẫn tệp cho phù hợp.

function linkbtn_enqueue() {
    //register script
    wp_register_script('link_btn',get_template_directory_uri() . '/js/link_btn.js', array('jquery'), '1.0', true);
    //now load it
    wp_enqueue_script( 'link_btn');
}

 add_action( 'admin_enqueue_scripts', 'linkbtn_enqueue' );

Nên làm về nó. Tôi sử dụng cách tiếp cận tương tự trong lớp metabox của tôi và nó có vẻ hoạt động tốt.


Cảm ơn bài viết Dale - điều này có vẻ rất thú vị. Tôi đã làm được như cách tạo nút trước đó và gọi tập lệnh wp-link, nhưng không biết làm thế nào để nó đi sau nó. Tôi sẽ thử và tìm hiểu thêm một số JS / AJAX trong tuần tới giữa các dự án và thực hiện điều này. Cảm ơn nhiều.
Dan

Bạn chỉ cần ghi lại một tập tin .js ở phía quản trị viên của chủ đề của bạn. Tôi sẽ chỉnh sửa ở trên để phản ánh điều đó.
Dale Sattler

0

RE: "Làm thế nào bạn sẽ làm điều đó? (Đại khái?)"

Đầu tiên, tôi sẽ xây dựng nó tương tự như chức năng liên kết trong WordPress: Trường văn bản đầu vào, kết quả, chọn chức năng và nút gửi (thêm liên kết).

Ajax - điều này sẽ kích hoạt khi văn bản được nhập vào đầu vào, trả về tập kết quả dựa trên cụm từ tìm kiếm. Hãy xem những gì chúng tôi đã làm với plugin tìm kiếm nhanh của chúng tôi , WP Jarvis. Bạn chỉ cần thiết lập lệnh gọi ajax để nhắm mục tiêu ajaxurl (admin-ajax.php) và đặt một hook hành động trong php của bạn để thực hiện truy vấn và lặp lại kết quả ở định dạng json. Bạn sẽ muốn kết quả bao gồm tiêu đề, loại bài đăng và permalink cho mỗi kết quả. Đọc thêm về ajax trong plugin .

Cuối cùng, chọn kết quả mà bạn quan tâm sẽ lấy permalink từ đối tượng json và chèn vào trường widget.

Tôi biết đây không phải là một câu trả lời hoàn chỉnh, nhưng tôi hy vọng điều này có ích.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.