Advertisement
Guest User

Untitled

a guest
May 30th, 2016
46
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.62 KB | None | 0 0
  1. jQuery(document).ready(function() {
  2. jQuery('.repeatable-add').click(function() {
  3. $(this).parent().append('<ul id="custom_branding-repeatable1" class="custom_repeatable_sub ui-sortable"></ul>');
  4. //alert(jQuery(this).closest('td').find('ul').attr('id'));
  5. field = jQuery(this).parent().find('li:last').clone(true);
  6. fieldLocation = jQuery(this).parent().find('li:last');
  7. console.log(field);
  8. jQuery('input', field).val('').attr('name', function(index, name) {
  9. return name.replace(/(d+)/, function(fullMatch, n) {
  10. //alert(Number(n) + 1)
  11. return Number(n) + 1;
  12. });
  13. })
  14. field.insertAfter(fieldLocation, jQuery(this).closest('td'))
  15. return false;
  16. });
  17.  
  18. jQuery('.repeatable-remove').click(function(){
  19. jQuery(this).parent().remove();
  20. return false;
  21. });
  22.  
  23. jQuery('.custom_repeatable').sortable({
  24. opacity: 0.6,
  25. revert: true,
  26. cursor: 'move',
  27. handle: '.sort'
  28. });
  29.  
  30.  
  31. /*---- Sub Add---*/
  32. jQuery('.repeatable-add-sub').click(function() {
  33.  
  34. //alert(jQuery(this).closest('ul').attr('class'));
  35. field_sub = jQuery(this).parent().find('.custom_repeatable_sub li:last').clone(true);
  36. fieldLocation_sub = jQuery(this).parent().find('.custom_repeatable_sub li:last');
  37. console.log(field_sub);
  38. jQuery('input', field_sub).val('').attr('name', function(index, name) {
  39. return name.replace(/(d+)/, function(fullMatch, n) {
  40. return Number(n) + 1;
  41. });
  42. })
  43. field_sub.insertAfter(fieldLocation_sub, jQuery(this).closest('td'))
  44. return false;
  45. });
  46. <?php
  47.  
  48. // Field Array
  49. $prefix = 'custom_';
  50. $custom_meta_fields = array(
  51. array(
  52. 'label' => 'Branding & Identity',
  53. 'desc' => 'A description for the field.',
  54. 'id' => $prefix.'branding',
  55. 'type' => 'repeatable'
  56. )
  57.  
  58. );
  59. // The Callback
  60. function show_custom_meta_box() {
  61. global $custom_meta_fields, $post;
  62. // Use nonce for verification
  63. echo '<input type="hidden" name="custom_meta_box_nonce" value="'.wp_create_nonce(basename(__FILE__)).'" />';
  64.  
  65. // Begin the field table and loop
  66. echo '<table class="form-table">';
  67. foreach ($custom_meta_fields as $field) {
  68. // get value of this field if it exists for this post
  69. $meta = get_post_meta($post->ID, $field['id'], true);
  70. // begin a table row with
  71. echo '<tr>
  72. <td><strong><label for="'.$field['id'].'">'.$field['label'].'</label></strong>&nbsp;';
  73. switch($field['type']) {
  74. // text
  75. case 'text':
  76. echo '<input type="text" name="'.$field['id'].'" id="'.$field['id'].'" value="'.$meta.'" size="30" />
  77. <br /><span class="description">'.$field['desc'].'</span>';
  78. break;
  79. // repeatable
  80. case 'repeatable':
  81. echo '
  82. <ul id="'.$field['id'].'-repeatable" class="custom_repeatable"><a class="repeatable-add button" href="#">+</a>';
  83. $i = 1;
  84. if ($meta) {
  85. foreach($meta as $row) {
  86. echo '<li class="nthNumeber-'.$i.'"><span class="sort hndle">|||</span>
  87. <input type="text" name="'.$field['id'].'['.$i.']" id="'.$field['id'].'" value="'.$row.'" size="30" />
  88. <a class="repeatable-remove button" href="#">-</a>';
  89. echo '<ul id="'.$field['id'].'-repeatable'.$i.'" class="custom_repeatable_sub">';
  90. $j = 1;
  91. if ($meta) {
  92. foreach($meta as $row) {
  93. echo '<li class="nestedNumeber-'.$j.'"><span class="sort hndle">X</span>
  94. <input type="text" name="'.$field['id'].$i.'['.$j.']" id="'.$field['id'].'" value="'.$row.'" size="30" />
  95. <a class="repeatable-remove button" href="#">-</a></li>';
  96. $j++;
  97. }
  98. } else {
  99. echo '<li><span class="sort hndle">x</span>
  100. <input type="text" name="'.$field['id'].$i.'['.$j.']" id="'.$field['id'].'" value="" size="30" />
  101. <a class="repeatable-remove button" href="#">-</a></li>';
  102. }
  103. echo '<a class="repeatable-add-sub button" href="#">Add NEW</a>';
  104. echo '</ul>';
  105.  
  106. echo '</li>';
  107. $i++;
  108. }
  109. } else {
  110. echo '<li class="nthNumeber-'.$i.'"><span class="sort hndle">|||</span>
  111. <input type="text" name="'.$field['id'].'['.$i.']" id="'.$field['id'].'" value="" size="30" />
  112. <a class="repeatable-remove button" href="#">-</a></li>';
  113. echo '<ul id="'.$field['id'].'-repeatable'.$i.'" class="custom_repeatable_sub">';
  114. $j = 1;
  115. if ($meta) {
  116. foreach($meta as $row) {
  117. echo '<li class="nestedNumeber-'.$j.'"><span class="sort hndle">X</span>
  118. <input type="text" name="'.$field['id'].$i.'['.$j.']" id="'.$field['id'].'" value="'.$row.'" size="30" />
  119. <a class="repeatable-remove button" href="#">-</a></li>';
  120. $j++;
  121. }
  122. } else {
  123. echo '<li class="nestedNumeber-'.$j.'"><span class="sort hndle">x</span>
  124. <input type="text" name="'.$field['id'].$i.'['.$j.']" id="'.$field['id'].'" value="" size="30" />
  125. <a class="repeatable-remove button" href="#">-</a></li>';
  126. }
  127. echo '<a class="repeatable-add-sub button" href="#">Add NEW</a>';
  128. echo '</ul>';
  129.  
  130. }
  131. echo '</ul>
  132. <span class="description">'.$field['desc'].'</span>';
  133. break;
  134. } //end switch
  135. echo '</td></tr>';
  136. } // end foreach
  137. echo '</table>'; // end table
  138. }
  139.  
  140. // Save the Data
  141. function save_custom_meta($post_id) {
  142. global $custom_meta_fields;
  143.  
  144. // verify nonce
  145. if (!wp_verify_nonce($_POST['custom_meta_box_nonce'], basename(__FILE__)))
  146. return $post_id;
  147. // check autosave
  148. if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE)
  149. return $post_id;
  150. // check permissions
  151. if ('page' == $_POST['post_type']) {
  152. if (!current_user_can('edit_page', $post_id))
  153. return $post_id;
  154. } elseif (!current_user_can('edit_post', $post_id)) {
  155. return $post_id;
  156. }
  157.  
  158. // loop through fields and save the data
  159. foreach ($custom_meta_fields as $field) {
  160. $old = get_post_meta($post_id, $field['id'], true);
  161. $new = $_POST[$field['id']];
  162. if ($new && $new != $old) {
  163. update_post_meta($post_id, $field['id'], $new);
  164. } elseif ('' == $new && $old) {
  165. delete_post_meta($post_id, $field['id'], $old);
  166. }
  167. } // end foreach
  168. }
  169. add_action('save_post', 'save_custom_meta');
  170.  
  171. ?>
  172. jQuery('.repeatable-remove-sub').click(function(){
  173. jQuery(this).parent().remove();
  174. return false;
  175. });
  176.  
  177. jQuery('.custom_repeatable_sub').sortable({
  178. opacity: 0.6,
  179. revert: true,
  180. cursor: 'move',
  181. handle: '.sort'
  182. });
  183. });
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement