• 05-05-2018, 03:15:07
    #1
    Bir müşteri için yapmış olduğum galeri eklentisini paylaşıyorum, belki ihtiyaç duyan vardır böyle bir şeye..

    Wordpress yazı ekleme sayfasında yeni bir alan oluşturarak burada postunuza resimler yüklemenizi sağlar.

    * Limitsiz resim ekleyebilirsiniz
    * Sürükleyip bırakarak sıralamayı değiştirebilirsiniz
    * Tek seferde birden çok resim seçebilir/yükleyebilirsiniz

    https://github.com/demirdoven/image-...t-in-wordpress
    (Burada nasıl kullanılacağını anlattım fakat Türkçe olarak aşağıda da anlatıyorum..)


    Kurulum

    Önce resim yükleme alanını oluşturalım (meta box)
    * Ben "house" adlı custom post type için oluşturdum, siz normal yazılar için yapacaksanız kodlardaki "house" yazan yerleri "post" olarak değiştirin.

    function add_gallery_mb(){
    add_meta_box(
    'post_gallery',
    'Gallery',
    'gallery_img_func_callback',
    'house',
    'normal',
    'core'
    );
    }
    add_action( 'admin_init', 'add_gallery_mb' );
    Resim yükleme alanının ne yapacağını yazalım..

    function gallery_img_func_callback(){
    wp_nonce_field( basename(__FILE__), 'sample_nonce' );
    global $post;
    $gallery_data = get_post_meta( $post->ID, 'gallery_data', true );
    ?>
    <div id="dynamic_cont">
        <div id="img_box_container">
        <?php
        if ( isset( $gallery_data['image_url'] ) )
        {
            for( $i = 0; $i < count( $gallery_data['image_url'] ); $i++ )
            {
            ?>
            <div class="gallery_single_row dolu">
              <div class="gallery_area_div image_container ">
                <img class="gallery_img_img" src="<?php esc_html_e( $gallery_data['image_url'][$i] ); ?>" height="55" width="55" onclick="open_media_uploader_image_this(this)"/>
    <input type="hidden"
                         class="meta_image_url"
                         name="gallery[image_url][]"
                         value="<?php esc_html_e( $gallery_data['image_url'][$i] ); ?>"
                  />
      </div>
              <div class="gallery_area_div">
                <span class="button remove" onclick="remove_img(this)" title="Remove"/><i class="fas fa-trash-alt"></i></span>
              </div>
              <div class="clear" />
    </div>
        </div>
            <?php
            }
        }
        ?>
        </div>
        <div style="display:none" id="main_box">
    <div class="gallery_single_row">
    <div class="gallery_area_div image_container" onclick="open_media_uploader_image(this)">
    <input class="meta_image_url" value="" type="hidden" name="gallery[image_url][]" />
    </div>
    <div class="gallery_area_div">
    <span class="button remove" onclick="remove_img(this)" title="Remove"/><i class="fas fa-trash-alt"></i></span>
    </div>
    <div class="clear"></div>
    </div>
        </div>
        <div id="add_gallery_single_row">
          <input class="button add" type="button" value="+" onclick="open_media_uploader_image_plus();" title="Add image"/>
        </div>
    </div>
      <?php
    }
    Özel script ve stillerimizi sitemizin <head> tagleri arasına yerleştirelim

    function gallery_print_func()
    {
        global $post;
        if( 'house' != $post->post_type )
            return;
        ?>  
        <style type="text/css">
          .gallery_area_div {
            float:right;
          }
      .image_container {
    float:left!important;
    width: 100px;
    background: url('https://i.hizliresim.com/dOJ6qL.png');
    height: 100px;
    background-repeat: no-repeat;
    background-size: cover;
    border-radius: 3px;
    cursor: pointer;
      }
      .image_container img{
    height: 100px;
    width: 100px;
    border-radius: 3px;
      }
          .clear {
            clear:both;
          }
          #dynamic_cont {
            width: 100%;
    height: auto;
    position: relative;
    display: inline-block;
          }
          #dynamic_cont input[type=text] {
            width:300px;
          }
          #dynamic_cont .gallery_single_row {
    float: left;
    display:inline-block;
    width: 100px;
    position: relative;
    margin-right: 8px;
    margin-bottom: 20px;
          }
      .dolu {
      display: inline-block!important;
      }
          #dynamic_cont label {
            padding:0 6px;
          }
      .button.remove {
    background: none;
    color: #f1f1f1;
    position: absolute;
    border: none;
    top: 4px;
    right: 7px;
    font-size: 1.2em;
    padding: 0px;
    box-shadow: none;
      }
      .button.remove:hover {
    background: none;
    color: #fff;
      }
      .button.add {
    background: #c3c2c2;
    color: #ffffff;
    border: none;
    box-shadow: none;
    width: 100px;
    height: 100px;
    font-size: 4em;
      }
      .button.add:hover, .button.add:focus {
    background: #e2e2e2;
    box-shadow: none;
    color: #0f88c1;
    border: none;
      }
        </style>
        <script defer src="https://use.fontawesome.com/releases/v5.0.8/js/solid.js" integrity="sha384-+Ga2s7YBbhOD6nie0DzrZpJes+b2K1xkpKxTFFcx59QmVPaSA8c7pycsNaFwUK6l" crossorigin="anonymous"></script>
        <link href = "https://code.jquery.com/ui/1.10.4/themes/ui-lightness/jquery-ui.css" rel = "stylesheet">
        <script defer src="https://use.fontawesome.com/releases/v5.0.8/js/fontawesome.js" integrity="sha384-7ox8Q2yzO/uWircfojVuCQOZl+ZZBg2D2J5nkpLqzH1HY0C1dHlTKIbpRz/LG23c" crossorigin="anonymous"></script>
        <script src = "https://code.jquery.com/ui/1.10.4/jquery-ui.js"></script>
        <script type="text/javascript">
            function remove_img(value) {
                var parent=jQuery(value).parent().parent();
                parent.remove();
            }
    var media_uploader = null;
    function open_media_uploader_image(aaa){
    media_uploader = wp.media({
    frame:    "post",
    state:    "insert",
    multiple: false
    });
    media_uploader.on("insert", function(){
    var json = media_uploader.state().get("selection").first().toJSON();
    var image_url = json.url;
    var html = '<img class="gallery_img_img" src="'+image_url+'" height="55" width="55" onclick="open_media_uploader_image_this(this)"/>';
    console.log(image_url);
    jQuery(aaa).append(html);
    jQuery(aaa).find('.meta_image_url').val(image_url);
    });
    media_uploader.open();
    }
    function open_media_uploader_image_this(aaa){
    media_uploader = wp.media({
    frame:    "post",
    state:    "insert",
    multiple: false
    });
    media_uploader.on("insert", function(){
    var json = media_uploader.state().get("selection").first().toJSON();
    var image_url = json.url;
    console.log(image_url);
    jQuery(aaa).attr('src',image_url);
    jQuery(aaa).siblings('.meta_image_url').val(image_url);
    });
    media_uploader.open();
    }
    
    function open_media_uploader_image_plus(){
    media_uploader = wp.media({
    frame:    "post",
    state:    "insert",
    multiple: true
    });
    media_uploader.on("insert", function(){
    
    var length = media_uploader.state().get("selection").length;
    var images = media_uploader.state().get("selection").models
    
    for(var iii = 0; iii < length; iii++){
    var image_url = images[iii].changed.url;
    var box = jQuery('#main_box').html();
    jQuery(box).appendTo('#img_box_container');
    var element = jQuery('#img_box_container .gallery_single_row:last-child').find('.image_container');
    var html = '<img class="gallery_img_img" src="'+image_url+'" height="55" width="55" onclick="open_media_uploader_image_this(this)"/>';
    element.append(html);
    element.find('.meta_image_url').val(image_url);
    console.log(image_url);
    }
    });
    media_uploader.open();
    }
    $(function() {
                $("#img_box_container").sortable();
            });
        </script>
    <?php
    }
    add_action( 'admin_head-post.php', 'gallery_print_func' );
    add_action( 'admin_head-post-new.php', 'gallery_print_func' );
    Resim yükleme alanımızın resimleri kaydetmesini sağlayalım

    function properties_save( $post_id ) {
    if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) {
    return;
    }
    $is_autosave = wp_is_post_autosave( $post_id );
    $is_revision = wp_is_post_revision( $post_id );
    $is_valid_nonce = ( isset( $_POST[ 'sample_nonce' ] ) && wp_verify_nonce( $_POST[ 'sample_nonce' ], basename( __FILE__ ) ) ) ? 'true' : 'false';
    
    if ( $is_autosave || $is_revision || !$is_valid_nonce ) {
    return;
    }
    if ( ! current_user_can( 'edit_post', $post_id ) ) {
    return;
    }
    
    // Correct post type
    if ( 'house' != $_POST['post_type'] ) // here you can set post type name
    return;
     
    if ( $_POST['gallery'] )
    {
    // Build array for saving post meta
    $gallery_data = array();
    for ($i = 0; $i < count( $_POST['gallery']['image_url'] ); $i++ )
    {
    if ( '' != $_POST['gallery']['image_url'][$i])
    {
    $gallery_data['image_url'][]  = $_POST['gallery']['image_url'][ $i ];
    }
    }
     
    if ( $gallery_data )
    update_post_meta( $post_id, 'gallery_data', $gallery_data );
    else
    delete_post_meta( $post_id, 'gallery_data' );
    }
    // Nothing received, all fields are empty, delete option
    else
    {
    delete_post_meta( $post_id, 'gallery_data' );
    }
    }
    add_action( 'save_post', 'properties_save' );
    İşte bu kadar...

    Gelelim resimleri nasıl kullanacağımıza...

    Aşağıdaki kodları single.php'de herhangi bir yere koyduğunuzda resimleriniz art arda görüntülenecektir.

    <!--Gallery-->
        <div class="photos">
            <div class="container">
                <h2>Photos</h2>
                <div class="row">
    <?php
    $postData = get_post_meta( get_the_ID() );
    $photos_query = $postData['gallery_data'][0];
    $photos_array = unserialize($photos_query);
    $url_array = $photos_array['image_url'];
    $count = sizeof($url_array);
    for( $i=0; $i<$count; $i++ ){ ?>
    <div class="img_single_box">
       <img class="gallery-img" src="<?php echo $url_array[$i]; ?>" alt=""/>
    </div>
    <?php } ?>
        </div>
            </div>
        </div>
    <!--/Gallery-->
  • 05-05-2018, 14:54:13
    #2
    Biz Add Media (Ortam Ekle) kısmından bu işi yapabiliyoruz. Ancak farklı bir tasarım söz konusu ise indirmek isterim. Demonuz var mı?
  • 05-05-2018, 15:15:07
    #3
    Onur89TR adlı üyeden alıntı: mesajı görüntüle
    Biz Add Media (Ortam Ekle) kısmından bu işi yapabiliyoruz. Ancak farklı bir tasarım söz konusu ise indirmek isterim. Demonuz var mı?
    Add Media'daki gibi editöre eklenmiyor, custom field olarak posta (yazıya) ekleniyor resimler. Ayrıca daha şık bi görüntüsü var. Yukarıdaki ekran görüntüsü gif'inde çektim nasıl çalıştığını. Şu an müşterinin paneli dışında çalışan bir demo yok maalesef