Wordpress 3.5의 자체 플러그인에 미디어 업 로더 표시


10

새로운 WordPress 3.5의 미디어 업 로더에는 거의 문제가 없습니다. 사진을 업로드하는 자체 플러그인을 만들었습니다. 이 코드 JS를 사용하고 있습니다.

<script type="text/javascript">
    var file_frame;

    jQuery('.button-secondary').live('click', function( event ){

        event.preventDefault();

        if ( file_frame ) {
            file_frame.open();
            return;
        }

        file_frame = wp.media.frames.file_frame = wp.media(
            {
                title: 'Select File',
                button: {
                    text: jQuery( this ).data( 'uploader_button_text' )
                },
                multiple: false
            }
        );

        file_frame.on('select', function() {
            attachment = file_frame.state().get('selection').first().toJSON();
            jQuery('#IMGsrc').val(attachment.url);
        });

        file_frame.open();
    });
</script>

코드는 제대로 작동하지만 불행히도 양식이 불완전한 것으로 보입니다. 사진을 선택해도 오른쪽에 '첨부 파일 표시 설정'이 표시되지 않습니다. 이유를 모르겠습니다. 미디어에 옵션을 추가하려고합니다.

displaySettings: true,
displayUserSettings: true

그러나 그것은 또한 작동하지 않습니다.


당신은 전화 wp_enqueue_media();?
Bainternet

답변:


7

업 로더 만

예제 코드 아래는 사후 편집 페이지에서만 작동합니다. 다른 페이지에서도 사용하려면 기능을 포함 시키 wp_enqueue_media()십시오 (다음 헤드 라인 참조).

jQuery(document).ready(function($) {

  var _custom_media = true,
      _orig_send_attachment = wp.media.editor.send.attachment;

  $('.stag-metabox-table .button').click(function(e) {

    var send_attachment_bkp = wp.media.editor.send.attachment;
    var button = $(this);
    var id = button.attr('id').replace('_button', '');

    _custom_media = true;
    wp.media.editor.send.attachment = function(props, attachment) {

      if ( _custom_media ) {
        $("#"+id).val(attachment.url);
      } else {
        return _orig_send_attachment.apply( this, [props, attachment] );
      };

    }

    wp.media.editor.open(button);

    return false;
  });

  $('.add_media').on('click', function() {
    _custom_media = false;
  });

});

미디어 관리자에 대한 간단한 설명

  1. 먼저 관련 스크립트를 포함시키고 핵심 기능을 사용하십시오. wp_enqueue_media(); 이 기능은 모든 관련 설정을 설정하고 메뉴 텍스트를 현지화하며 모든 해당 javascript 파일을로드합니다.

    를 통해 사용자 지정 스크립트를 추가 할 수 있습니다 wp_enqueue_script().

    // Also adds a check to make sure `wp_enqueue_media` has only been called once.
    // @see: http://core.trac.wordpress.org/ticket/22843
    if ( ! did_action( 'wp_enqueue_media' ) )
        wp_enqueue_media();

    사용자 정의 헤더의 기본 스크립트 추가 : wp_enqueue_script( 'custom-header' ); 이미지 선택 프레임을 만들고 인터페이스 요소 (예 : 단추 또는 링크)에 연결합니다. 그런 다음 선택한 이미지 ID로 URL 또는 선택 항목을 호출합니다. 테마 사용자 정의 헤더 이미지를 선택할 때 사용되는 것과 동일한 스크립트입니다.

  2. 미디어 관리자에 버튼을 추가하십시오.

    <?php
    $modal_update_href = esc_url( add_query_arg( array(
        'page'     => 'my_media_manager',
        '_wpnonce' => wp_create_nonce( 'my_media_manager_options' ),
    ), admin_url( 'upload.php' ) ) );
    ?>
    
    <p>
    <a id="choose-from-library-link" href="#"
        data-update-link="<?php echo esc_attr( $modal_update_href ); ?>"
        data-choose="<?php esc_attr_e( 'Choose a Default Image' ); ?>"
        data-update="<?php esc_attr_e( 'Set as default image' ); ?>"><?php _e( 'Set default image' ); ?>
    </a> |
    </p>
  3. 마지막으로 동작 함수 정의, 데이터 업데이트 링크 URL에 전달할 이미지 ID를 처리하기 위해 코드를 추가해야합니다.

    // Add to the top of our data-update-link page
    if ( isset($_REQUEST['file']) ) { 
        check_admin_referer( 'my_media_manager_options' );
    
            // Process and save the image id
        $options = get_option( 'my_media_manager_options', TRUE );
        $options['default_image'] = absint( $_REQUEST['file'] );
        update_option( 'my_media_manager_options', $options );
    }

출처와 힌트 :


Widgets.php와 같이 관리자 페이지의 'page'속성은 무엇입니까?
AlxVallejo 2019

사용 현재 관리 정보 플러그인을하고, 모든 후크를이 문자열을 참조 그대는이 페이지에 대한 사용할 수 있습니다. 귀하의 예는 widgets.php입니다.
bueltge

0

내가 넣어 가지고 대답을 뿐만 아니라 stackoverflow.com 사이트에 그것은 도움이 될 것입니다.

이 방법을 사용하여 미디어 업 로더를 사용자 정의 플러그인에 사용하고 있습니다. 이것이 도움이 될 것입니다.

메인 테마 파일 (index.php를) 다음을 추가합니다.

wp_enqueue_style('thickbox'); // call to media files in wp
wp_enqueue_script('thickbox');
wp_enqueue_script( 'media-upload'); 


// load script to admin
function wpss_admin_js() {
     $siteurl = get_option('siteurl');
     $url = $siteurl . '/wp-content/plugins/' . basename(dirname(__FILE__)) . '/js/admin_script.js';
     echo "<script type='text/javascript' src='$url'></script>"; 
}
 add_action('admin_head', 'wpss_admin_js');


에서 admin_script.js의 파일

jQuery('#wpss_upload_image_button').click(function() {
    formfield = jQuery('#wpss_upload_image').attr('name');
    tb_show('', 'media-upload.php?type=image&amp;TB_iframe=true');
    return false;
});

window.send_to_editor = function(html) {
 imgurl = jQuery('img',html).attr('src');
 jQuery('#wpss_upload_image').val(imgurl);
 tb_remove();

 jQuery('#wpss_upload_image_thumb').html("<img height='65' src='"+imgurl+"'/>");
}

관리자 파일 (admin_settings.php),

<div id="wpss_upload_image_thumb" class="wpss-file">
    <?php if(isset($record->security_image) && $record->security_image !='') { ?>
       <img src="<?php echo $record->security_image;?>"  width="65"/><?php } else {    echo $defaultImage; } ?>
</div>
<input id="wpss_upload_image" type="text" size="36" name="wpss_upload_image" value="" class="wpss_text wpss-file" />
<input id="wpss_upload_image_button" type="button" value="Upload Image" class="wpss-filebtn" />

내 블로그에서 자세한 내용

추가 정보 http://webexplorar.com/how-to-use-media-uploader-in-wordpress-custom-plugin/


여기에 해당 답변을 귀하의 답변으로 전달하십시오. 해당 링크가 제거되면 귀하의 답변은 쓸모가 없습니다.
Pieter Goosen

나는 현재 thickbox가 너무 오래되었다고 생각합니다.
Musa Haidari

0

미디어 업 로더에이 코드를 사용하십시오. jquery 응답에 링크가 있습니다.

<label for="upload_image">
    <input id="upload_image" type="text" size="36" name="ad_image" value="http://" /> 
    <input id="upload_image_button" class="button" type="button" value="Upload Image" />
    <br />Enter a URL or upload an image
</label>

<?php
add_action('admin_enqueue_scripts', 'my_admin_scripts');

function my_admin_scripts() {
    if (isset($_GET['page']) && $_GET['page'] == 'my_plugin_page') {
        wp_enqueue_media();
        wp_register_script('my-admin-js', WP_PLUGIN_URL.'/my-plugin/my-admin.js', array('jquery'));
        wp_enqueue_script('my-admin-js');
    }
}

?>

<script>
    jQuery(document).ready(function($){


    var custom_uploader;


    $('#upload_image_button').click(function(e) {

        e.preventDefault();

        //If the uploader object has already been created, reopen the dialog
        if (custom_uploader) {
            custom_uploader.open();
            return;
        }

        //Extend the wp.media object
        custom_uploader = wp.media.frames.file_frame = wp.media({
            title: 'Choose Image',
            button: {
                text: 'Choose Image'
            },
            multiple: true
        });

        //When a file is selected, grab the URL and set it as the text field's value
        custom_uploader.on('select', function() {
            console.log(custom_uploader.state().get('selection').toJSON());
            attachment = custom_uploader.state().get('selection').first().toJSON();
            $('#upload_image').val(attachment.url);
        });

        //Open the uploader dialog
        custom_uploader.open();

    });


});
    </script>
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.