ایجاد فیلد متاباکس آپلود تصویر(سوال)

rocki3oy

کاربر عضو
با سلام و احترام.

دوستان و مدیران عزیز کد زیر مربوط به متاباکس تصویر می باشد که اگر در فانکشن قرار بدید فیلد اضافه خواهد شد ولی در زمینه دلخواه ها ذخیره نمیشه و همین طور کد فراخوانی هم ندارم.

ممنون میشم یک تست کوچیک بزنین و راهنماییم کنید.

با تشکر.


کد:
<?php
add_action('admin_menu', 'addMetaBox');
add_action('save_post', 'saveMetaData', 10, 2);
add_action('admin_head', 'embedUploaderCode');

//Define the metabox attributes.
$metaBox = array(
  'id'     => 'my-meta-box',
  'title'    => 'My Meta Box',
  'page'     => 'post',
  'context'  => 'side',
  'priority'   => 'low',
  'fields' => array(
    array(
      'name'   => 'My Custom Image',
      'desc'   => 'A Custom Image Displayed On Your Site Somewhere.',
      'id'  => 'myCustomImage',  //value is stored with this as key.
      'class' => 'image_upload_field',
      'type'   => 'media'
    )
  )
);

function addMetaBox() {
  global $metaBox;
  add_meta_box($metaBox['id'], $metaBox['title'], 'createMetaBox', 
    $metaBox['page'], $metaBox['context'], $metaBox['priority']);

}

/**
* Create Metabox HTML.
*/
function createMetaBox($post) {
  global $metaBox;
  if (function_exists('wp_nonce_field')) {
    wp_nonce_field('awd_nonce_action','awd_nonce_field');
  }

  foreach ($metaBox['fields'] as $field) {
    echo '<div class="awdMetaBox">';
    //get attachment id if it exists.
    $meta = get_post_meta($post->ID, $field['id'], true);
    switch ($field['type']) {
      case 'media':
?>
        <p><?php echo $field['desc']; ?></p>
        <div class="awdMetaImage">
<?php 
        if ($meta) {
          echo wp_get_attachment_image( $meta, 'thumbnail', true);
          $attachUrl = wp_get_attachment_url($meta);
          echo 
          '<p>URL: <a target="_blank" href="'.$attachUrl.'">'.$attachUrl.'</a></p>';
        }
?>    
        </div><!-- end .awdMetaImage -->
        <p>
          <input type="hidden" 
            class="metaValueField" 
            id="<?php echo $field['id']; ?>" 
            name="<?php echo $field['id']; ?>"
            value="<?php echo $meta; ?>" 
          /> 
          <input class="image_upload_button"  type="button" value="Choose File" /> 
          <input class="removeImageBtn" type="button" value="Remove File" />
        </p>

<?php
      break;
    }
    echo '</div> <!-- end .awdMetaBox -->';
  } //end foreach
}//end function createMetaBox


function saveMetaData($post_id, $post) {
  //make sure we're saving at the right time.
  //DOING_AJAX is set when saving a quick edit on the page that displays all posts/pages  
  //Not checking for this will cause our meta data to be overwritten with blank data.
  if ( empty($_POST)
    || !wp_verify_nonce($_POST['awd_nonce_field'],'awd_nonce_action')
    || $post->post_type == 'revision'
    || defined('DOING_AJAX' )) {
    return;
  }

  global $metaBox;
  global $wpdb;

  foreach ($metaBox['fields'] as $field) {
    $value = $_POST[$field['id']];

    if ($field['type'] == 'media' && !is_numeric($value) ) {
      //Convert URL to Attachment ID.
      $value = $wpdb->get_var(
        "SELECT ID FROM $wpdb->posts 
         WHERE guid = '$value' 
         AND post_type='attachment' LIMIT 1");
    }
    update_post_meta($post_id, $field['id'], $value);
  }//end foreach
}//end function saveMetaData

/**
 * Add JavaScript to get URL from media uploader.
 */
function embedUploaderCode() {
  ?>
  <script type="text/javascript">
  jQuery(document).ready(function() {

    jQuery('.removeImageBtn').click(function() {
      jQuery(this).closest('p').prev('.awdMetaImage').html('');   
      jQuery(this).prev().prev().val('');
      return false;
    });

    jQuery('.image_upload_button').click(function() {
      inputField = jQuery(this).prev('.metaValueField');
      tb_show('', 'media-upload.php?TB_iframe=true');
      window.send_to_editor = function(html) {
        url = jQuery(html).attr('href');
        inputField.val(url);
        inputField.closest('p').prev('.awdMetaImage').html('<p>URL: '+ url + '</p>');  
        tb_remove();
      };
      return false;
    });
  });

  </script>
  <?php
} 
?>
 

Mohammad

مدیر انجمن
پرسنل مدیریت
چرا از افزونه سازنده زمینه دلخواه استفاده نمی کنی؟ خودش همه این قابلیت ها رو داره...



 

rocki3oy

کاربر عضو
چرا از افزونه سازنده زمینه دلخواه استفاده نمی کنی؟ خودش همه این قابلیت ها رو داره...
با سلام و احترام.

ممنونم بابت پاسختون.

بله با این افزونه آشنایی دارم ولی نمی خوام از افزونه استفاده کنم.

آقا محمد عزیز امکانش هست کد سالم کد بالا رو بهم بدید.

من این کد رو از سایت های خارجی گرفتم همه چی کار می کنه جز ذخیره شدن در زمینه دلخواه.

با تشکر از محبت شما.

 

hannanstd.ir

مدیر انجمن و توسعه دهنده ووکامرس پارسی
کدی که گذاشتید مشکل زیاد داشت بهرحال فک کنم اصلاح شده :


کد:
<?php
add_action('admin_menu', 'addMetaBox');
add_action('save_post', 'saveMetaData', 10, 2);
add_action('admin_head', 'embedUploaderCode');

//Define the metabox attributes.
$metaBox = array(
  'id'     => 'my-meta-box',
  'title'    => 'My Meta Box',
  'page'     => 'post',
  'context'  => 'side',
  'priority'   => 'low',
  'fields' => array(
    array(
      'name'   => 'My Custom Image',
      'desc'   => 'A Custom Image Displayed On Your Site Somewhere.',
      'id'  => 'myCustomImage',  //value is stored with this as key.
      'class' => 'image_upload_field',
      'type'   => 'media'
    )
  )
);

function addMetaBox() {
  global $metaBox;
  add_meta_box($metaBox['id'], $metaBox['title'], 'createMetaBox', 
    $metaBox['page'], $metaBox['context'], $metaBox['priority']);

}

/**
* Create Metabox HTML.
*/
function createMetaBox($post) {
  global $metaBox;
  if (function_exists('wp_nonce_field')) {
    wp_nonce_field('awd_nonce_action','awd_nonce_field');
  }

  foreach ($metaBox['fields'] as $field) {
    echo '<div class="awdMetaBox">';
    //get attachment id if it exists.
    $meta = get_post_meta($post->ID, $field['id'], true);
    switch ($field['type']) {
      case 'media':
?>
        <p><?php echo $field['desc']; ?></p>
        <div class="awdMetaImage">
<?php 
        if ($meta) {
          echo wp_get_attachment_image( $meta, 'thumbnail', true);
          $attachUrl = wp_get_attachment_url($meta);
          echo 
          '<p>URL: <a target="_blank" href="'.$attachUrl.'">'.$attachUrl.'</a></p>';
        }
?>    
        </div><!-- end .awdMetaImage -->
        <p>
          <input type="hidden" 
            class="metaValueField" 
            id="<?php echo $field['id']; ?>" 
            name="<?php echo $field['id']; ?>"
            value="<?php echo $meta; ?>" 
          /> 
          <input class="image_upload_button"  type="button" value="Choose File" /> 
          <input class="removeImageBtn" name="hannan_delet" type="button" value="Remove File" />
        </p>

<?php
      break;
    }
    echo '</div> <!-- end .awdMetaBox -->';
    ?>
     <div id="lasturl">
    <?php echo get_post_meta($post->ID, 'post_img', true); ?>
    </div>
    <?php
  } //end foreach
}//end function createMetaBox


function saveMetaData($post_id, $post) {
  //make sure we're saving at the right time.
  //DOING_AJAX is set when saving a quick edit on the page that displays all posts/pages  
  //Not checking for this will cause our meta data to be overwritten with blank data.
  if ( empty($_POST)
    || !wp_verify_nonce($_POST['awd_nonce_field'],'awd_nonce_action')
    || $post->post_type == 'revision'
    || defined('DOING_AJAX' )) {
    return;
  }

  global $metaBox;
  global $wpdb;
  $meta_value = get_post_meta($post_id, 'post_img', true);
  foreach ($metaBox['fields'] as $field) {
    $new_meta_value = $_POST[$field['id']];
    $meta = get_post_meta($post_id, $field['id'], true);
    if ($field['type'] == 'media') {
     if ($meta) {
          echo wp_get_attachment_image( $meta, 'thumbnail', true);
          $attachUrl = wp_get_attachment_url($meta);
          $new_meta_value = $attachUrl ? $attachUrl : "";
        }
    }

    if ( $new_meta_value && strlen($meta_value) < 1  )
    add_post_meta( $post_id, 'post_img', $new_meta_value, true );

    elseif ( $new_meta_value != $meta_value )
        update_post_meta( $post_id, 'post_img', $new_meta_value );

    if ($_POST['hannan_delet'] || ( strlen($new_meta_value) < 1  && $meta_value ) )
    delete_post_meta($post_id, 'post_img', $new_meta_value);


  }//end foreach
}//end function saveMetaData

/**
 * Add JavaScript to get URL from media uploader.
 */
function embedUploaderCode() {
  ?>
  <script type="text/javascript">
  jQuery(document).ready(function() {

    jQuery('.removeImageBtn').click(function() {
      jQuery(this).closest('p').prev('.awdMetaImage').html('');  
        document.getElementById('lasturl').innerHTML = "";
      jQuery(this).prev().prev().val('');
      return false;
    });

    jQuery('.image_upload_button').click(function() {
      inputField = jQuery(this).prev('.metaValueField');
      tb_show('', 'media-upload.php?TB_iframe=true');
      window.send_to_editor = function(html) {
        url = jQuery(html).attr('href');
        inputField.val(url);
        inputField.closest('p').prev('.awdMetaImage').html('<p>URL: '+ url + '</p>');  
        tb_remove();
        document.getElementById('lasturl').innerHTML = "";
      };
      return false;
    });
  });

  </script>
  <?php
}
?>
برای نمایشش هم داخل حلقه پست ها از کد زیر استفاده کنید :


کد:
get_post_meta($post->ID, 'post_img', true)
 
بالا