Want more features on Pastebin? Sign Up, it's FREE!
Guest

Choices Theme - Add Portfolio Description MetaBox

By: a guest on Nov 23rd, 2012  |  syntax: PHP  |  size: 13.04 KB  |  views: 30  |  expires: Never
download  |  raw  |  embed  |  report abuse  |  print
Text below is selected. Please press Ctrl+C to copy to your clipboard. (⌘+C on Mac)
  1.  
  2. $portfolio_excerpt_1_metabox = array(
  3.         'id' => 'portfolio-excerpt',
  4.         'title' => 'portfolio-excerpt',
  5.         'page' => array('portfolio'),
  6.         'context' => 'advanced',
  7.         'priority' => 'high',
  8.         'fields' => array(
  9.  
  10.                                
  11.                                 array(
  12.                                         'name'                  => 'Portfolio Excerpt',
  13.                                         'desc'                  => 'This is the excerpt that will display in Main portfolio sortable archive under the image',
  14.                                         'id'                            => 'nick_prtf_excerpt',
  15.                                         'class'                         => 'nick_prtf_excerpt',
  16.                                         'type'                  => 'textarea',
  17.                                         'rich_editor'   => 0,                  
  18.                                         'max'                   => 0                           
  19.                                 ),
  20.                                 )
  21. );                     
  22.                        
  23. add_action('admin_menu', 'nick_add_portfolio_excerpt_1_meta_box');
  24. function nick_add_portfolio_excerpt_1_meta_box() {
  25.  
  26.         global $portfolio_excerpt_1_metabox;           
  27.  
  28.         foreach($portfolio_excerpt_1_metabox['page'] as $page) {
  29.                 add_meta_box($portfolio_excerpt_1_metabox['id'], $portfolio_excerpt_1_metabox['title'], 'nick_show_portfolio_excerpt_1_box', $page, 'advanced', 'high', $portfolio_excerpt_1_metabox);
  30.         }
  31. }
  32.  
  33. // function to show meta boxes
  34. function nick_show_portfolio_excerpt_1_box()    {
  35.         global $post;
  36.         global $portfolio_excerpt_1_metabox;
  37.         global $nick_prefix;
  38.         global $wp_version;
  39.        
  40.         // Use nonce for verification
  41.         echo '<input type="hidden" name="nick_portfolio_excerpt_1_meta_box_nonce" value="', wp_create_nonce(basename(__FILE__)), '" />';
  42.        
  43.         echo '<table class="form-table">';
  44.  
  45.         foreach ($portfolio_excerpt_1_metabox['fields'] as $field) {
  46.                 // get current post meta data
  47.  
  48.                 $meta = get_post_meta($post->ID, $field['id'], true);
  49.                
  50.                 echo '<tr>',
  51.                                 '<th style="width:20%"><label for="', $field['id'], '">', stripslashes($field['name']), '</label></th>',
  52.                                 '<td class="nick_field_type_' . str_replace(' ', '_', $field['type']) . '">';
  53.                 switch ($field['type']) {
  54.                         case 'text':
  55.                                 echo '<input type="text" name="', $field['id'], '" id="', $field['id'], '" value="', $meta ? $meta : $field['std'], '" size="30" style="width:97%" /><br/>', '', stripslashes($field['desc']);
  56.                                 break;
  57.                         case 'date':
  58.                                 if($meta) { $value = nick_timestamp_to_date($meta); } else {  $value = ''; }
  59.                                 echo '<input type="text" class="nick_datepicker" name="' . $field['id'] . '" id="' . $field['id'] . '" value="'. $value . '" size="30" style="width:97%" />' . '' . stripslashes($field['desc']);
  60.                                 break;
  61.                         case 'upload':
  62.                                 echo '<input type="text" class="nick_upload_field" name="', $field['id'], '" id="', $field['id'], '" value="', $meta ? $meta : $field['std'], '" size="30" style="width:80%" /><input class="nick_upload_image_button" type="button" value="Upload Image" /><br/>', '', stripslashes($field['desc']);
  63.                                 break;
  64.                         case 'textarea':
  65.                        
  66.                                 if($field['rich_editor'] == 1) {
  67.                                         if($wp_version >= 3.3) {
  68.                                                 echo wp_editor($meta, $field['id'], array('textarea_name' => $field['id']));
  69.                                         } else {
  70.                                                 // older versions of WP
  71.                                                 $editor = '';
  72.                                                 if(!post_type_supports($post->post_type, 'editor')) {
  73.                                                         $editor = wp_tiny_mce(true, array('editor_selector' => $field['class'], 'remove_linebreaks' => false) );
  74.                                                 }
  75.                                                 $field_html = '<div style="width: 97%; border: 1px solid #DFDFDF;"><textarea name="' . $field['id'] . '" class="' . $field['class'] . '" id="' . $field['id'] . '" cols="60" rows="8" style="width:100%">'. $meta . '</textarea></div><br/>' . __(stripslashes($field['desc']));
  76.                                                 echo $editor . $field_html;
  77.                                         }
  78.                                 } else {
  79.                                         echo '<div style="width: 100%;"><textarea name="', $field['id'], '" class="', $field['class'], '" id="', $field['id'], '" cols="60" rows="8" style="width:97%">', $meta ? $meta : $field['std'], '</textarea></div>', '', stripslashes($field['desc']);                        
  80.                                 }
  81.                                
  82.                                 break;
  83.                         case 'select':
  84.                                 echo '<select name="', $field['id'], '" id="', $field['id'], '">';
  85.                                 foreach ($field['options'] as $option) {
  86.                                         echo '<option value="' . $option . '"', $meta == $option ? ' selected="selected"' : '', '>', $option, '</option>';
  87.                                 }
  88.                                 echo '</select>', '', stripslashes($field['desc']);
  89.                                 break;
  90.                         case 'radio':
  91.                                 foreach ($field['options'] as $option) {
  92.                                         echo '<input type="radio" name="', $field['id'], '" value="', $option, '"', $meta == $option ? ' checked="checked"' : '', ' /> ', $option;
  93.                                 }
  94.                                 echo '<br/>' . stripslashes($field['desc']);
  95.                                 break;
  96.                         case 'multicheck':
  97.                                 foreach ($field['options'] as $option) {
  98.                                         echo '<input type="checkbox" name="' . $field['id'] . '[' . $option . ']" value="' . $option . '"' . checked( true, in_array( $option, $meta ), false ) . '/> ' . $option;
  99.                                 }
  100.                                 echo '<br/>' . stripslashes($field['desc']);
  101.                                 break;
  102.                         case 'checkbox':
  103.                                 echo '<input type="checkbox" name="', $field['id'], '" id="', $field['id'], '"', $meta ? ' checked="checked"' : '', ' /> ';
  104.                                 echo stripslashes($field['desc']);
  105.                                 break;
  106.                         case 'slider':
  107.                                 echo '<input type="text" rel="' . $field['max'] . '" name="' . $field['id'] . '" id="' . $field['id'] . '" value="' . $meta . '" size="1" style="float: left; margin-right: 5px" />';
  108.                                 echo '<div class="nick-slider" rel="' . $field['id'] . '" style="float: left; width: 60%; margin: 5px 0 0 0;"></div>';         
  109.                                 echo '<div style="width: 100%; clear: both;">' . stripslashes($field['desc']) . '</div>';
  110.                                 break;
  111.                         case 'repeatable' :
  112.                                
  113.                                 $field_html = '<input type="hidden" id="' . $field['id'] . '" class="nick_repeatable_field_name" value=""/>';
  114.                                 if(is_array($meta)) {
  115.                                         $count = 1;
  116.                                         foreach($meta as $key => $value) {
  117.                                                 $field_html .= '<div class="nick_repeatable_wrapper"><input type="text" class="nick_repeatable_field" name="' . $field['id'] . '[]" id="' . $field['id'] . '[]" value="' . $meta[$key] . '" size="30" style="width:90%" />';
  118.                                                 if($count > 1) {
  119.                                                         $field_html .= '<a href="#" class="nick_remove_repeatable button-secondary">x</a><br/>';
  120.                                                 }
  121.                                                 $field_html .= '</div>';
  122.                                                 $count++;
  123.                                         }
  124.                                 } else {
  125.                                         $field_html .= '<div class="nick_repeatable_wrapper"><input type="text" class="nick_repeatable_field" name="' . $field['id'] . '[]" id="' . $field['id'] . '[]" value="' . $meta . '" size="30" style="width:90%" /></div>';
  126.                                 }
  127.                                 $field_html .= '<button class="nick_add_new_field button-secondary">' . __('Add New', 'nick') . '</button>  ' . __(stripslashes($field['desc']));
  128.                                
  129.                                 echo $field_html;
  130.                                
  131.                                 break;
  132.                        
  133.                         case 'repeatable upload' :
  134.                        
  135.                                 $field_html = '<input type="hidden" id="' . $field['id'] . '" class="nick_repeatable_upload_field_name" value=""/>';
  136.                                 if(is_array($meta)) {
  137.                                         $count = 1;
  138.                                         foreach($meta as $key => $value) {
  139.                                                 $field_html .= '<div class="nick_repeatable_upload_wrapper"><input type="text" class="nick_repeatable_upload_field nick_upload_field" name="' . $field['id'] . '[]" id="' . $field['id'] . '[]" value="' . $meta[$key] . '" size="30" style="width:80%" /><button class="button-secondary nick_upload_image_button">Upload File</button>';
  140.                                                 if($count > 1) {
  141.                                                         $field_html .= '<a href="#" class="nick_remove_repeatable button-secondary">x</a><br/>';
  142.                                                 }
  143.                                                 $field_html .= '</div>';
  144.                                                 $count++;
  145.                                         }
  146.                                 } else {
  147.                                         $field_html .= '<div class="nick_repeatable_upload_wrapper"><input type="text" class="nick_repeatable_upload_field nick_upload_field" name="' . $field['id'] . '[]" id="' . $field['id'] . '[]" value="' . $meta . '" size="30" style="width:80%" /><input class="button-secondary nick_upload_image_button" type="button" value="Upload File" /></div>';
  148.                                 }
  149.                                 $field_html .= '<button class="nick_add_new_upload_field button-secondary">' . __('Add New', 'nick') . '</button>  ' . __(stripslashes($field['desc']));               
  150.                        
  151.                                 echo $field_html;
  152.                        
  153.                                 break;
  154.                 }
  155.                 echo     '<td>',
  156.                         '</tr>';
  157.         }
  158.        
  159.         echo '</table>';
  160. }      
  161.  
  162. // Save data from meta box
  163. add_action('save_post', 'nick_portfolio_excerpt_1_save');
  164. function nick_portfolio_excerpt_1_save($post_id) {
  165.         global $post;
  166.         global $portfolio_excerpt_1_metabox;
  167.        
  168.         // verify nonce
  169.         if (!wp_verify_nonce($_POST['nick_portfolio_excerpt_1_meta_box_nonce'], basename(__FILE__))) {
  170.                 return $post_id;
  171.         }
  172.  
  173.         // check autosave
  174.         if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) {
  175.                 return $post_id;
  176.         }
  177.  
  178.         // check permissions
  179.         if ('page' == $_POST['post_type']) {
  180.                 if (!current_user_can('edit_page', $post_id)) {
  181.                         return $post_id;
  182.                 }
  183.         } elseif (!current_user_can('edit_post', $post_id)) {
  184.                 return $post_id;
  185.         }
  186.        
  187.         foreach ($portfolio_excerpt_1_metabox['fields'] as $field) {
  188.        
  189.                 $old = get_post_meta($post_id, $field['id'], true);
  190.                 $new = $_POST[$field['id']];
  191.                
  192.                 if ($new && $new != $old) {
  193.                         if($field['type'] == 'date') {
  194.                                 $new = nick_format_date($new);
  195.                                 update_post_meta($post_id, $field['id'], $new);
  196.                         } else {
  197.                                 if(is_string($new)) {
  198.                                         $new = $new;
  199.                                 }
  200.                                 update_post_meta($post_id, $field['id'], $new);
  201.                                
  202.                                
  203.                         }
  204.                 } elseif ('' == $new && $old) {
  205.                         delete_post_meta($post_id, $field['id'], $old);
  206.                 }
  207.         }
  208. }
  209.  
  210.  
  211. function nick_export_ui_scripts() {
  212.  
  213.         global $nick_options;
  214.         ?>
  215.         <script type="text/javascript">
  216.                         jQuery(document).ready(function($)
  217.                         {
  218.                                
  219.                                 if($('.form-table .nick_upload_field').length > 0 ) {
  220.                                         // Media Uploader
  221.                                         window.formfield = '';
  222.        
  223.                                         $('.nick_upload_image_button').live('click', function() {
  224.                                         window.formfield = $('.nick_upload_field',$(this).parent());
  225.                                                 tb_show('', 'media-upload.php?type=file&TB_iframe=true');
  226.                                                                                 return false;
  227.                                                 });
  228.        
  229.                                                 window.original_send_to_editor = window.send_to_editor;
  230.                                                 window.send_to_editor = function(html) {
  231.                                                         if (window.formfield) {
  232.                                                                 imgurl = $('a','<div>'+html+'</div>').attr('href');
  233.                                                                 window.formfield.val(imgurl);
  234.                                                                 tb_remove();
  235.                                                         }
  236.                                                         else {
  237.                                                                 window.original_send_to_editor(html);
  238.                                                         }
  239.                                                         window.formfield = '';
  240.                                                         window.imagefield = false;
  241.                                                 }
  242.                                 }
  243.                                 if($('.form-table .nick-slider').length > 0 ) {
  244.                                         $('.nick-slider').each(function(){
  245.                                                 var $this = $(this);
  246.                                                 var id = $this.attr('rel');
  247.                                                 var val = $('#' + id).val();
  248.                                                 var max = $('#' + id).attr('rel');
  249.                                                 max = parseInt(max);
  250.                                                 //var step = $('#' + id).closest('input').attr('rel');
  251.                                                 $this.slider({
  252.                                                         value: val,
  253.                                                         max: max,
  254.                                                         step: 1,
  255.                                                         slide: function(event, ui) {
  256.                                                                 $('#' + id).val(ui.value);
  257.                                                         }
  258.                                                 });
  259.                                         });
  260.                                 }
  261.                                
  262.                                 if($('.form-table .nick_datepicker').length > 0 ) {
  263.                                         var dateFormat = 'mm/dd/yy';
  264.                                         $('.nick_datepicker').datepicker({dateFormat: dateFormat});
  265.                                 }
  266.                                
  267.                                 // add new repeatable field
  268.                                 $(".nick_add_new_field").on('click', function() {                                      
  269.                                         var field = $(this).closest('td').find("div.nick_repeatable_wrapper:last").clone(true);
  270.                                         var fieldLocation = $(this).closest('td').find('div.nick_repeatable_wrapper:last');
  271.                                         // set the new field val to blank
  272.                                         $('input', field).val("");
  273.                                         field.insertAfter(fieldLocation, $(this).closest('td'));
  274.        
  275.                                         return false;
  276.                                 });            
  277.        
  278.                                 // add new repeatable upload field
  279.                                 $(".nick_add_new_upload_field").on('click', function() {       
  280.                                         var container = $(this).closest('tr');
  281.                                         var field = $(this).closest('td').find("div.nick_repeatable_upload_wrapper:last").clone(true);
  282.                                         var fieldLocation = $(this).closest('td').find('div.nick_repeatable_upload_wrapper:last');
  283.                                         // set the new field val to blank
  284.                                         $('input[type="text"]', field).val("");
  285.                                
  286.                                         field.insertAfter(fieldLocation, $(this).closest('td'));
  287.        
  288.                                         return false;
  289.                                 });
  290.                                
  291.                                 // remove repeatable field
  292.                                 $('.nick_remove_repeatable').on('click', function(e) {
  293.                                         e.preventDefault();
  294.                                         var field = $(this).parent();
  295.                                         $('input', field).val("");
  296.                                         field.remove();                        
  297.                                         return false;
  298.                                 });                                                                                    
  299.                                                                                                                
  300.                         });
  301.           </script>
  302.         <?php
  303. }
  304.  
  305. function nick_export_datepicker_ui_scripts() {
  306.         global $nick_base_dir;
  307.         wp_enqueue_script('jquery-ui-datepicker');
  308.         wp_enqueue_script('jquery-ui-slider');
  309. }
  310. function nick_export_datepicker_ui_styles() {
  311.         global $nick_base_dir;
  312.         wp_enqueue_style('jquery-ui-css', 'http://ajax.googleapis.com/ajax/libs/jqueryui/1.8/themes/base/jquery-ui.css', false, '1.8', 'all');
  313. }
  314.  
  315. // these are for newest versions of WP
  316. add_action('admin_print_scripts-post.php', 'nick_export_datepicker_ui_scripts');
  317. add_action('admin_print_scripts-edit.php', 'nick_export_datepicker_ui_scripts');
  318. add_action('admin_print_scripts-post-new.php', 'nick_export_datepicker_ui_scripts');
  319. add_action('admin_print_styles-post.php', 'nick_export_datepicker_ui_styles');
  320. add_action('admin_print_styles-edit.php', 'nick_export_datepicker_ui_styles');
  321. add_action('admin_print_styles-post-new.php', 'nick_export_datepicker_ui_styles');
  322.  
  323. if ((isset($_GET['post']) && (isset($_GET['action']) && $_GET['action'] == 'edit') ) || (strstr($_SERVER['REQUEST_URI'], 'wp-admin/post-new.php')))
  324. {
  325.         add_action('admin_head', 'nick_export_ui_scripts');
  326. }
  327.  
  328. // converts a time stamp to date string for meta fields
  329. if(!function_exists('nick_timestamp_to_date')) {
  330.         function nick_timestamp_to_date($date) {
  331.                
  332.                 return date('m/d/Y', $date);
  333.         }
  334. }
  335. if(!function_exists('nick_format_date')) {
  336.         function nick_format_date($date) {
  337.  
  338.                 $date = strtotime($date);
  339.                
  340.                 return $date;
  341.                         }
  342. }
clone this paste RAW Paste Data