Meta kutu alanına "medya yükle" düğmesini ekle


17

Bir dosya yükleme (video dosyaları için) kullanması gereken bir meta etiketi olan özel bir yazı var. Merak ediyorum, WordPress medya yükleyicisine işaret eden ve seçilen karşıya yüklenen dosyanın URL'sini yükleme düğmesini ilişkilendiren metin alanına ayarlayan bir "Yükle" düğmesi eklemenin doğru yolu nedir?

Ben gerçek meta etiketi seçeneği oluşturma kodu değil, aslında bir Wordpress medya yükleme düğmesi düzgün eklemek için bir yol arıyorum.


Burada deneyebileceğiniz öğretici ve basit eklentiye bakın . Bana yardımcı oldu.
Fanky

Yanıtlar:


13

Bu medya yükleyici iskeletine bakın . Meta Kutu gibi özel işaretlemenizde de kullanabilirsiniz.

İpucu, yalnızca Meta Kutunuzu etkinleştirdiğiniz sayfadaki komut dosyalarını kullandığınızı kontrol edin. Aksi takdirde, genellikle varsayılan sayfalarda ve yükleyicide bir sorun vardır.

Şimdi, yükleyiciyi özel bölümünüze dahil etmek için önemli bölümleri temizlemeye çalışın.

İlk önce meta kutuya bir düğme ekleyin:

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

Şimdi komut dosyalarını sıralayın:

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

Son bölüm, bunun içindeki thickbox ve yükleyiciyi kullanmak için özel komut dosyanızdır.

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 sayfası aracılığıyla sadece küçük bir hatırlatma esas olarak satır içi javascript yankı için kullanılır admin_print_scriptsdiyor admin_print_scripts. admin_print_scriptsyönetici sayfalarındaki stilleri veya komut dosyalarını sıralamak için kullanılmamalıdır. admin_enqueue_scriptsBunun yerine kullanın .
Zulian

Bu yöntemi denedim ve metin giriş kutusu #upload_imageasla doldurulmadı
Bay Pablo

1
bu cevap işe yaramıyor. diğer cevaplara bakınız.
T.Todua

0

Çözüm:

1) function.php dosyasına gerekli komut dosyalarını kaydetmek için bloğu ekleyin:

// 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) ve ardından metabox bloğu ekleyin :

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 birden fazla alana ihtiyacınız varsa, bunu kolayca yapabilirsiniz: http://pastebin.com/raw/xpU1ch2W


Bir cazibe gibi çalışır, ancak sadece görüntülerle. Aynı şeyi video dosyalarıyla nasıl yapabilirim?
Alex
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.