Anzeigen des Medien-Uploaders im eigenen Plugin in Wordpress 3.5


10

Ich habe wenig Probleme mit Media Uploader in neuem WordPress 3.5. Ich habe ein eigenes Plugin erstellt, das das Bild hochlädt. Ich benutze diesen Code 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>

Der Code funktioniert gut, aber leider erscheinen Formulare unvollständig. Wenn ich ein Bild auswähle, werden auf der rechten Seite nicht die Einstellungen für die Anhangsanzeige angezeigt. Ich weiß nicht warum. Ich versuche, Medien Optionen hinzuzufügen:

displaySettings: true,
displayUserSettings: true

Aber es funktioniert auch nicht.


rufen Sie an wp_enqueue_media();?
Bainternet

Antworten:


7

Nur Uploader

funktioniert unter einem Beispielcode nur auf der Seite nach der Bearbeitung. Wenn Sie auch auf einer anderen Seite verwenden, fügen Sie die Funktion hinzu wp_enqueue_media(), siehe nächste Überschrift.

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

});

Kurze Erklärung des Media Managers

  1. Fügen Sie zunächst die relevanten Skripte hinzu, verwenden Sie die Kernfunktion: wp_enqueue_media(); Die Funktion richtet alle relevanten Einstellungen ein, lokalisiert den Menütext und lädt alle entsprechenden Javascript-Dateien.

    Sie können ein benutzerdefiniertes Skript über hinzufügen 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();

    Fügen Sie auch ein Standardskript für benutzerdefinierte Header hinzu: wp_enqueue_script( 'custom-header' ); Dadurch wird ein Bildauswahlrahmen erstellt und mit einem Schnittstellenelement verknüpft, z. B. einer Schaltfläche oder einem Link. Anschließend wird eine URL oder unsere Auswahl mit der ausgewählten Bild-ID aufgerufen. Dies ist das gleiche Skript, das bei der Auswahl von benutzerdefinierten Header-Bildern für Designs verwendet wird.

  2. Fügen Sie die Schaltfläche zum Medienmanager hinzu:

    <?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. Als letztes definieren Sie die Aktionsfunktion. Sie müssen Code für die Verarbeitung der Bild-ID hinzufügen, die an die URL des Datenaktualisierungs-Links übergeben wird.

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

Quellen und Hinweise:


Was wäre das Attribut 'Seite' für eine Administrationsseite, sagen wir Widgets.php?
AlxVallejo

Verwenden Sie das aktuelle Admin-Info- Plugin und Sie sehen diese Zeichenfolge, auch alle Hooks, die Sie über diese Seite verwenden können. In Ihrem Beispiel ist es widgets.php.
Bueltge

0

Ich habe auch eine Antwort auf die Website stackoverflow.com gestellt, und das wäre hilfreich.

Ich verwende diese Methode, um den Medien-Uploader in meinem benutzerdefinierten Plugin zu verwenden. Vielleicht wäre dies eine Hilfe.

Fügen Sie diese in der Hauptdesign-Datei (index.php) hinzu.

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


In der Datei 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-Datei (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" />

Weitere Details in meinem Blog

Weitere Informationen http://webexplorar.com/how-to-use-media-uploader-in-wordpress-custom-plugin/


Bitte übertragen Sie diese Antwort auf Ihre Antwort hier. Wenn dieser Link entfernt wird, ist Ihre Antwort hier unbrauchbar.
Pieter Goosen

Ich denke, die Dickbox ist jetzt so alt.
Musa Haidari

0

Verwenden Sie diesen Code einfach für den Medien-Uploader. Sie haben Link in JQuery Antwort.

<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>
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.