메타 박스 필드에 "미디어 업로드"버튼 추가


17

파일 업로드 (비디오 파일)를 사용해야하는 메타 태그가있는 사용자 정의 게시물이 있습니다. WordPress 미디어 업 로더를 가리키는 "업로드"버튼을 추가하고 업로드 된 버튼을 연결하는 텍스트 필드에 선택된 업로드 된 파일의 URL을 설정하는 올바른 방법은 무엇인지 궁금합니다.

실제 메타 태그 옵션을 만드는 코드는 아니지만 실제로 Wordpress 미디어 업로드 버튼을 올바르게 추가하는 방법을 찾고 있습니다.


여기에서 시도 할 수있는 튜토리얼 및 간단한 플러그인을 참조 하십시오 . 나를 도와 주었다.
Fanky

답변:


13

미디어 업 로더 스켈레톤을 참조하십시오 . 메타 박스와 같은 맞춤 마크 업에서 사용할 수도 있습니다.

힌트, 메타 박스를 활성화 한 페이지의 스크립트 만 사용한다는 것을 확인하십시오. 그렇지 않으면 기본 페이지와 업 로더에서 종종 문제가됩니다.

이제 업 로더를 사용자 지정 부분에 포함시키기 위해 중요한 부분을 지우려고합니다.

먼저 메타 상자에 버튼을 포함하십시오.

<input id="upload_image" type="text" size="36" name="upload_image" value="" />
<input id="upload_image_button" type="button" value="Upload Image" />

이제 스크립트를 대기열에 넣습니다.

function my_admin_scripts() {    
    wp_enqueue_script('media-upload');
    wp_enqueue_script('thickbox');
    wp_register_script('my-upload', WP_PLUGIN_URL.'/my-script.js', array('jquery','media-upload','thickbox'));
    wp_enqueue_script('my-upload');
}

function my_admin_styles() {

    wp_enqueue_style('thickbox');
}

// better use get_current_screen(); or the global $current_screen
if (isset($_GET['page']) && $_GET['page'] == 'my_plugin_page') {

    add_action('admin_print_scripts', 'my_admin_scripts');
    add_action('admin_print_styles', 'my_admin_styles');
}

마지막 부분은 thickbox와이 안에 업 로더를 사용하는 사용자 지정 스크립트입니다.

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

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

        formfield = $('#upload_image').attr('name');
        tb_show( '', 'media-upload.php?type=image&amp;TB_iframe=true' );
        window.send_to_editor = function(html) {
           imgurl = $(html).attr('src');
           $('#upload_image').val(imgurl);
           tb_remove();
        }

        return false;
    });

});

2
Codex 페이지를 통한 간단한 알림 admin_print_scriptsadmin_print_scripts주로 인라인 자바 스크립트를 에코하는 데 사용됩니다. admin_print_scripts관리자 페이지에서 스타일이나 스크립트를 대기열에 넣는 데 사용해서는 안됩니다. admin_enqueue_scripts대신 사용하십시오 .
Zulian

이 방법을 시도했지만 텍스트 입력 상자 #upload_image가 채워지지 않습니다
Mr Pablo

1
이 답변은 효과가 없습니다. 다른 답변을 참조하십시오.
T.Todua

0

해결책:

1) functions.php 에서 필요한 스크립트를 등록하기위한 블록을 추가하십시오 :

// add necessary scripts
add_action('plugins_loaded', function(){
  if($GLOBALS['pagenow']=='post.php'){
    add_action('admin_print_scripts', 'my_admin_scripts');
    add_action('admin_print_styles',  'my_admin_styles');
  }
});

function my_admin_scripts(){
  wp_enqueue_script('jquery');
  wp_enqueue_script('media-upload');
  wp_enqueue_script('thickbox');
}

// Proper way to enqueue
// wp_register_script(
//   'my-upload',
//   WP_PLUGIN_URL.'/my-script.js',
//   array('jquery','media-upload','thickbox') /* dependencies */
// );
//
// wp_enqueue_script('my-upload');

function my_admin_styles(){
  wp_enqueue_style('thickbox');
}

2) 메타 박스 블록 을 추가하십시오 .

add_action(
  'add_meta_boxes',
  function(){
    add_meta_box(
      'my-metaboxx1', // ID
      'my-metaboxx1-title', // Title
      'func99999', // Callback (Construct function)
      get_post_types(), //screen (This adds metabox to all post types)
      'normal' // Context
    );
 },
 9
);
function func99999($post){
  $url = get_post_meta($post->ID, 'my-image-for-post', true); ?>
  <input id="my_image_URL" name="my_image_URL" type="text"
         value="<?php echo $url;?>" style="width:400px;" />
  <input id="my_upl_button" type="button" value="Upload Image" /><br/>
  <img src="<?php echo $url;?>" style="width:200px;" id="picsrc" />
  <script>
  jQuery(document).ready( function($) {
    jQuery('#my_upl_button').click(function() {
      window.send_to_editor = function(html) {
        imgurl = jQuery(html).attr('src')
        jQuery('#my_image_URL').val(imgurl);
        jQuery('#picsrc').attr("src", imgurl);
        tb_remove();
      }

      formfield = jQuery('#my_image_URL').attr('name');
      tb_show('', 'media-upload.php?type=image&amp;TB_iframe=true' );
      return false;
    }); // End on click
  });
  </script>
<?php
}

add_action('save_post', function ($post_id) {
  if (isset($_POST['my_image_URL'])){
    update_post_meta($post_id, 'my-image-for-post', $_POST['my_image_URL']);
  }
});





여러 필드가 필요한 경우 ps를 사용하면 다음과 같이 쉽게 할 수 있습니다. http://pastebin.com/raw/xpU1ch2W


매력처럼 작동하지만 이미지에서만 작동합니다. 비디오 파일로 동일한 작업을 수행하려면 어떻게해야합니까?
Alex
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.