Admin Columns - Version 1.1

Version Description

  • Added User Columns.
  • Added before / after text for custom fields
  • Added custom field type 'Numeric'.
  • Added custom field sortables.
  • Fixed domain path
  • Fixed settings link
Download this release

Release Info

Developer codepress
Plugin Icon 128x128 Admin Columns
Version 1.1
Comparing to
See all releases

Code changes from version 1.0 to 1.1

codepress-admin-columns.php CHANGED
@@ -1,9 +1,9 @@
1
  <?php
2
  /*
3
  Plugin Name: Codepress Admin Columns
4
- Version: 1.0.1
5
- Description: This plugin makes it easy to customize Admin Columns for your Posts, Pages and Custom Post Type Screens.
6
- Author: Tobias Schutter
7
  Author URI: http://www.codepress.nl
8
  Plugin URI: http://www.codepress.nl/plugins/codepress-admin-columns/
9
  Text Domain: codepress-admin-columns
@@ -26,7 +26,7 @@ along with this program; if not, write to the Free Software
26
  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
27
  */
28
 
29
- define( 'CPAC_VERSION', '1.0.1' );
30
 
31
  /**
32
  * Init Class
@@ -73,7 +73,7 @@ class Codepress_Admin_Columns
73
  $this->handle_requests();
74
  $this->options = get_option('cpac_options');
75
  $this->options_default = get_option('cpac_options_default');
76
-
77
  // slug
78
  $this->slug = 'codepress-admin-columns';
79
  $this->textdomain = 'codepress-admin-columns';
@@ -81,14 +81,15 @@ class Codepress_Admin_Columns
81
  // translations
82
  load_plugin_textdomain( $this->textdomain, false, dirname( plugin_basename( __FILE__ ) ) . '/languages/' );
83
 
84
- // Actions and hooks
85
  add_action( 'admin_menu', array( &$this, 'settings_menu') );
86
  add_action( 'admin_init', array( &$this, 'register_settings') );
87
  add_action( 'admin_init', array( &$this, 'register_columns' ) );
88
  add_action( 'admin_enqueue_scripts', array( &$this, 'admin_enqueue_scripts') );
89
- add_action( 'manage_pages_custom_column', array( &$this, 'manage_column_value'), 10, 2 );
90
- add_action( 'manage_posts_custom_column', array( &$this, 'manage_column_value'), 10, 2 );
91
- add_action( 'admin_print_styles' , array( &$this, 'column_styles') );
 
92
  add_filter( 'request', array( &$this, 'handle_requests_orderby_column') );
93
  add_filter( 'plugin_action_links', array( &$this, 'add_settings_link'), 10, 2);
94
  }
@@ -140,187 +141,142 @@ class Codepress_Admin_Columns
140
  */
141
  public function register_columns()
142
  {
 
143
  foreach ( $this->post_types as $post_type ) {
144
 
145
  // register column per post type
146
- add_filter("manage_edit-{$post_type}_columns", array(&$this, 'callback_set_column'));
147
 
148
  // register column as sortable
149
- add_filter( "manage_edit-{$post_type}_sortable_columns", array(&$this, 'callback_set_sortable_column'));
150
  }
 
 
 
 
151
  }
152
 
153
  /**
154
- * Callback Set Column
155
  *
156
  * @since 1.0
157
  */
158
- public function callback_set_column($columns)
159
  {
160
  global $post_type;
161
- $columns = $this->set_column($columns, $post_type);
162
 
163
- return $columns;
 
 
 
 
 
 
 
 
 
 
164
  }
165
 
166
  /**
167
- * Callback Set Sortable Column
168
  *
169
- * @since 1.0
170
  */
171
- public function callback_set_sortable_column($columns)
172
  {
173
- global $post_type;
174
- $columns = $this->set_sortable_filter($columns, $post_type);
175
-
176
- return $columns;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
177
  }
178
 
179
  /**
180
- * Settings Page Template.
181
  *
182
- * This function in conjunction with others usei the WordPress
183
- * Settings API to create a settings page where users can adjust
184
- * the behaviour of this plugin.
 
 
 
 
 
 
 
 
185
  *
186
- * @since 1.0
187
  */
188
- public function plugin_settings_page()
189
  {
190
- // loop through post types
191
- $rows = '';
192
- foreach ( $this->post_types as $post_type ) {
193
-
194
- // post type label
195
- $label = $this->get_singular_name($post_type);
196
-
197
- // id
198
- $id = $this->sanitize_string($post_type);
199
-
200
- // build draggable boxes
201
- $boxes = $this->get_column_options($post_type);
202
-
203
- // class
204
- $class = $this->is_menu_type_current($post_type) ? ' current' : ' hidden';
205
 
206
- $rows .= "
207
- <tr id='cpac-box-{$id}' valign='top' class='cpac-box-row{$class}'>
208
- <th class='cpac_post_type' scope='row'>
209
- {$label}
210
- </th>
211
- <td>
212
- <h3 class='cpac_post_type hidden'>{$label}</h3>
213
- {$boxes}
214
- </td>
215
- </tr>
216
- ";
217
- }
218
-
219
- // Post Type Menu
220
- $menu = $this->get_post_type_menu();
221
 
222
- ?>
223
- <div id="cpac" class="wrap">
224
- <?php screen_icon($this->slug) ?>
225
- <h2><?php _e('Codepress Admin Columns', $this->textdomain); ?></h2>
226
- <?php echo $menu ?>
227
- <div class="postbox-container" style="width:70%;">
228
- <div class="metabox-holder">
229
- <div class="meta-box-sortables">
230
-
231
- <div id="general-cpac-settings" class="postbox">
232
- <div title="Click to toggle" class="handlediv"><br></div>
233
- <h3 class="hndle">
234
- <span><?php _e('Admin Columns', $this->textdomain ); ?></span>
235
- </h3>
236
- <div class="inside">
237
- <form method="post" action="options.php">
238
-
239
- <?php settings_fields( 'cpac-settings-group' ); ?>
240
-
241
- <table class="form-table">
242
-
243
- <?php echo $rows ?>
244
-
245
- <tr class="bottom" valign="top">
246
- <th scope="row"></th>
247
- <td>
248
- <p class="submit">
249
- <input type="submit" class="button-primary" value="<?php _e('Save Changes') ?>" />
250
- </p>
251
- </td>
252
- </tr>
253
- </table>
254
- </form>
255
- </div>
256
- </div><!-- general-settings -->
257
-
258
- <div id="restore-cpac-settings" class="postbox">
259
- <div title="Click to toggle" class="handlediv"><br></div>
260
- <h3 class="hndle">
261
- <span><?php _e('Restore defaults', $this->textdomain) ?></span>
262
- </h3>
263
- <div class="inside">
264
- <form method="post" action="">
265
- <input type="submit" class="button" name="cpac-restore-defaults" value="<?php _e('Restore default settings', $this->textdomain ) ?>" onclick="return confirm('<?php _e("Warning! ALL saved admin columns data will be deleted. This cannot be undone. \'OK\' to delete, \'Cancel\' to stop", $this->textdomain); ?>');" />
266
- </form>
267
- <p class="description"><?php _e('This will delete all column settings and restore the default settings.', $this->textdomain); ?></p>
268
- </div>
269
- </div><!-- restore-cpac-settings -->
270
-
271
- </div>
272
- </div>
273
- </div><!-- .postbox-container -->
274
-
275
- <div class="postbox-container" style="width:20%;">
276
- <div class="metabox-holder">
277
- <div class="meta-box-sortables">
278
-
279
- <div id="side-cpac-settings" class="postbox">
280
- <div title="Click to toggle" class="handlediv"><br></div>
281
- <h3 class="hndle">
282
- <span><?php _e('Need support?', $this->textdomain) ?></span>
283
- </h3>
284
- <div class="inside">
285
- <p><?php printf(__('If you are having problems with this plugin, please talk about them in the <a href="%s">Support forums</a>.', $this->textdomain), 'http://wordpress.org/tags/codepress-admin-columns' );?></p>
286
- <p><?php printf(__("If you're sure you've found a bug, or have a feature request, please <a href='%s'>submit your feedback</a>.", $this->textdomain), 'http://www.codepress.nl/plugins/codepress-admin-columns#feedback');?></p>
287
- </div>
288
- </div><!-- side-cpac-settings -->
289
-
290
- </div>
291
- </div>
292
- </div><!-- .postbox-container -->
293
-
294
- </div>
295
- <?php
296
  }
297
-
298
  /**
299
  * Get a list of Column options per post type
300
  *
301
  * @since 1.0
302
  */
303
- private function get_column_options($post_type)
304
  {
305
  // merge all columns
306
- $display_columns = $this->get_merged_columns($post_type);
307
 
308
  // define
309
  $list = '';
310
 
311
  // loop throught the active columns
312
  if ( $display_columns ) {
313
- foreach ( $display_columns as $key => $values ) {
314
 
315
  // add items to the list
316
- $list .= $this->get_box($post_type, $key, $values);
317
 
318
  }
319
  }
320
 
321
  // custom field button
322
  $button_add_column = '';
323
- if ( $this->get_postmeta_by_posttype($post_type) )
324
  $button_add_column = "<a href='javacript:;' class='cpac-add-customfield-column button'>+ " . __('Add Custom Field Column') . "</a>";
325
 
326
  return "
@@ -339,60 +295,62 @@ class Codepress_Admin_Columns
339
  *
340
  * @since 1.0
341
  */
342
- private function get_merged_columns($post_type)
343
  {
344
  //get saved database columns
345
- $db_columns = $this->get_db_columns($post_type);
346
-
347
- // get wp default columns
348
- $wp_default_columns = $this->get_wp_default_columns($post_type);
349
 
350
- // get custom columns
351
- $wp_custom_columns = $this->get_custom_columns($post_type);
352
-
353
- // merge wp default and custom columns
354
- $default_columns = wp_parse_args($wp_custom_columns, $wp_default_columns);
355
 
 
 
 
 
 
 
 
 
 
356
  // loop throught the active columns
357
  if ( $db_columns ) {
358
- foreach ( $db_columns as $key => $values ) {
359
 
360
  // get column meta options from custom columns
361
- if ( strpos($key, 'column-meta-') !== false )
362
- $db_columns[$key]['options'] = $wp_custom_columns['column-meta-1']['options'];
363
 
364
  // add static options
365
  else
366
- $db_columns[$key]['options'] = $default_columns[$key]['options'];
367
 
368
- unset($default_columns[$key]);
369
  }
370
  }
371
 
372
  // merge all
373
- $display_columns = wp_parse_args($db_columns, $default_columns);
374
-
375
  return $display_columns;
376
  }
377
-
378
-
379
  /**
380
  * Get checkbox
381
  *
382
  * @since 1.0
383
  */
384
- private function get_box($post_type, $key, $values)
385
  {
386
  $classes = array();
387
 
388
  // set state
389
  $state = isset($values['state']) ? $values['state'] : '';
390
 
391
- // set sortorder
392
- $sortorder = isset($values['sortorder']) && $values['sortorder'] == 'on' ? 'on' : '';
393
-
394
  // class
395
- $classes[] = "cpac-box-{$key}";
396
  if ( $state )
397
  $classes[] = 'active';
398
  if ( ! empty($values['options']['class']) )
@@ -400,7 +358,7 @@ class Codepress_Admin_Columns
400
  $class = implode(' ', $classes);
401
 
402
  // more box options
403
- $more_options = $this->get_additional_box_options($post_type, $key, $values);
404
  $action = "<a class='cpac-action' href='#open'>open</a>";
405
 
406
  // hide box options
@@ -414,8 +372,7 @@ class Codepress_Admin_Columns
414
  <div class='cpac-type-options'>
415
 
416
  <div class='cpac-checkbox'></div>
417
- <input type='hidden' class='cpac-state' name='cpac_options[columns][{$post_type}][{$key}][state]' value='{$state}'/>
418
- <input type='hidden' name='cpac_options[columns][{$post_type}][{$key}][sortorder]' value='{$sortorder}'/>
419
  <label class='main-label'>{$values['label']}</label>
420
  </div>
421
  <div class='cpac-meta-title'>
@@ -423,8 +380,8 @@ class Codepress_Admin_Columns
423
  <span>{$values['options']['type_label']}</span>
424
  </div>
425
  <div class='cpac-type-inside'>
426
- <label for='cpac_options[columns][{$post_type}][{$key}][label]'>Label: </label>
427
- <input type='text' name='cpac_options[columns][{$post_type}][{$key}][label]' value='{$values['label']}' class='text'/>
428
  <br/>
429
  {$more_options}
430
  </div>
@@ -439,13 +396,13 @@ class Codepress_Admin_Columns
439
  *
440
  * @since 1.0
441
  */
442
- private function get_additional_box_options($post_type, $key, $values)
443
  {
444
  $fields = '';
445
 
446
  // Custom Fields
447
- if ( strpos($key, 'column-meta-') !== false )
448
- $fields .= $this->get_box_options_customfields($post_type, $key, $values);
449
 
450
  return $fields;
451
  }
@@ -455,7 +412,7 @@ class Codepress_Admin_Columns
455
  *
456
  * @since 1.0
457
  */
458
- private function get_box_options_customfields($post_type, $key, $values)
459
  {
460
  // get post meta fields
461
  $fields = $this->get_postmeta_by_posttype($post_type);
@@ -485,10 +442,13 @@ class Codepress_Admin_Columns
485
  'library_id' => __('Media Library Icon', $this->textdomain),
486
  'excerpt' => __('Excerpt'),
487
  'array' => __('Multiple Values', $this->textdomain),
 
488
  );
489
 
490
- // add filters
491
- $fieldtypes = apply_filters('cpac-field-types', $fieldtypes );
 
 
492
  foreach ( $fieldtypes as $fkey => $fieldtype ) {
493
  $fieldtype_options .= sprintf
494
  (
@@ -499,12 +459,16 @@ class Codepress_Admin_Columns
499
  );
500
  }
501
 
 
 
 
 
502
  if ( empty($field_options) )
503
  return false;
504
 
505
  // add remove button
506
  $remove = '<p class="remove-description description">'.__('This field can not be removed', $this->textdomain).'</p>';
507
- if ( $key != 'column-meta-1') {
508
  $remove = "
509
  <p>
510
  <a href='javascript:;' class='cpac-delete-custom-field-box'>".__('Remove')."</a>
@@ -513,12 +477,18 @@ class Codepress_Admin_Columns
513
  }
514
 
515
  $inside = "
516
- <label for='cpac_options[columns][{$post_type}][{$key}][field]'>Custom Field: </label>
517
- <select name='cpac_options[columns][{$post_type}][{$key}][field]'>{$field_options}</select>
518
  <br/>
519
- <label for='cpac_options[columns][{$post_type}][{$key}][field_type]'>Field Type: </label>
520
- <select name='cpac_options[columns][{$post_type}][{$key}][field_type]'>{$fieldtype_options}</select>
521
  <br/>
 
 
 
 
 
 
522
  {$remove}
523
  ";
524
 
@@ -564,7 +534,20 @@ class Codepress_Admin_Columns
564
  wp_enqueue_script( 'jquery-ui-sortable' );
565
  wp_enqueue_script( 'cpac-admin', $this->plugin_url('/assets/js/admin-column.js'), array('jquery', 'jquery-ui-sortable'), CPAC_VERSION );
566
  }
567
-
 
 
 
 
 
 
 
 
 
 
 
 
 
568
  /**
569
  * Get post types
570
  *
@@ -651,9 +634,15 @@ class Codepress_Admin_Columns
651
 
652
  // stores the default columns that are set by WP or set in the theme.
653
  $wp_default_columns = array();
 
 
654
  foreach ( $this->post_types as $post_type ) {
655
- $wp_default_columns[$post_type] = $this->get_wp_default_columns($post_type);
656
  }
 
 
 
 
657
  update_option( 'cpac_options_default', $wp_default_columns );
658
  }
659
 
@@ -720,20 +709,20 @@ class Codepress_Admin_Columns
720
  *
721
  * @since 1.0
722
  */
723
- public function manage_column_value($key, $post_id)
724
  {
725
- $type = $key;
726
 
727
  // Check for taxonomies, such as column-taxonomy-[taxname]
728
  if ( strpos($type, 'column-taxonomy-') !== false )
729
  $type = 'column-taxonomy';
730
 
731
  // Check for custom fields, such as column-meta-[customfieldname]
732
- if ( strpos($type, 'column-meta-') !== false )
733
  $type = 'column-meta';
734
 
735
  // Hook
736
- do_action('cpac-manage-column', $type, $key, $post_id);
737
 
738
  // Switch Types
739
  $result = '';
@@ -787,9 +776,14 @@ class Codepress_Admin_Columns
787
  $result = get_post($post_id)->post_name;
788
  break;
789
 
 
 
 
 
 
790
  // Taxonomy
791
  case "column-taxonomy" :
792
- $tax = str_replace('column-taxonomy-','',$key);
793
  $tags = get_the_terms($post_id, $tax);
794
  $tarr = array();
795
  if ( $tax == 'post_format' && empty($tags) ) {
@@ -805,7 +799,7 @@ class Codepress_Admin_Columns
805
 
806
  // Custom Field
807
  case "column-meta" :
808
- $result = $this->get_column_value_custom_field($post_id, $key);
809
  break;
810
 
811
  // Attachment
@@ -814,7 +808,7 @@ class Codepress_Admin_Columns
814
  break;
815
 
816
  default :
817
- $result = get_post_meta( $post_id, $key, true );
818
 
819
  endswitch;
820
 
@@ -823,13 +817,66 @@ class Codepress_Admin_Columns
823
 
824
  echo $result;
825
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
826
 
827
  /**
828
  * Get column value of post attachments
829
  *
830
  * @since 1.0
831
  */
832
- private function get_column_value_attachments($post_id)
833
  {
834
  $result = '';
835
  $attachments = get_posts(array(
@@ -851,11 +898,15 @@ class Codepress_Admin_Columns
851
  *
852
  * @since 1.0
853
  */
854
- private function get_column_value_custom_field($post_id, $key)
855
  {
856
- $columns = $this->get_db_columns( get_post_type($post_id) );
857
- $field = isset($columns[$key]['field']) ? $columns[$key]['field'] : '';
858
- $fieldtype = isset($columns[$key]['field_type']) ? $columns[$key]['field_type'] : '';
 
 
 
 
859
 
860
  // Get meta field value
861
  $meta = get_post_meta($post_id, $field, true);
@@ -891,6 +942,9 @@ class Codepress_Admin_Columns
891
 
892
  endswitch;
893
 
 
 
 
894
  return $meta;
895
  }
896
 
@@ -909,43 +963,18 @@ class Codepress_Admin_Columns
909
  $retVal[] = $r_pieces;
910
  }
911
  }
912
- return implode( $glue, $retVal );
913
- }
914
-
915
- /**
916
- * Set Columns for Registering
917
- *
918
- * @since 1.0
919
- */
920
- private function set_column($columns, $post_type)
921
- {
922
- $db_columns = $this->get_db_columns($post_type);
923
 
924
- if ( !$db_columns )
925
- return $columns;
926
-
927
- // set already loaded columns by plugins
928
- $set_columns = $this->filter_preset_columns($columns, $post_type);
929
-
930
- // loop through columns
931
- foreach ( $db_columns as $key => $values ) {
932
-
933
- // is active
934
- if ( isset($values['state']) && $values['state'] == 'on' ){
935
-
936
- // register format
937
- $set_columns[$key] = $values['label'];
938
- }
939
- }
940
- return $set_columns;
941
- }
942
 
943
  /**
944
  * Set columns. These columns apply either for every post or set by a plugin.
945
  *
946
  * @since 1.0
947
  */
948
- private function filter_preset_columns($columns, $post_type = 'post')
949
  {
950
  $options = $this->options_default;
951
 
@@ -953,7 +982,7 @@ class Codepress_Admin_Columns
953
  return $columns;
954
 
955
  // we use the wp default columns for filtering...
956
- $db_columns = $options[$post_type];
957
 
958
  // ... the ones that are set by plugins, theme functions and such.
959
  $dif_columns = array_diff(array_keys($columns), array_keys($db_columns));
@@ -967,44 +996,19 @@ class Codepress_Admin_Columns
967
  }
968
 
969
  return $pre_columns;
970
- }
971
 
972
  /**
973
- * Set sortable columns
974
  *
975
  * @since 1.0
976
  */
977
- private function set_sortable_filter($columns, $post_type)
978
  {
979
- $db_columns = $this->get_db_columns($post_type);
980
-
981
- if ( !$db_columns )
982
- return $columns;
983
-
984
- // loop through columns
985
- foreach ( $db_columns as $key => $values ) {
986
-
987
- // is active
988
- if ( isset($values['sortorder']) && $values['sortorder'] == 'on' ){
989
-
990
- // register format
991
- $columns[$key] = $this->sanitize_string($values['label']);
992
- }
993
- }
994
- return $columns;
995
- }
996
-
997
- /**
998
- * Get WP default supported admin columns per post type.
999
- *
1000
- * @since 1.0
1001
- */
1002
- private function get_wp_default_columns($post_type = 'post')
1003
- {
1004
- // load some dependencies
1005
- require_once(ABSPATH . 'wp-admin\includes\template.php');
1006
- require_once(ABSPATH . 'wp-admin\includes\class-wp-list-table.php');
1007
- require_once(ABSPATH . 'wp-admin\includes\class-wp-posts-list-table.php');
1008
 
1009
  // we need to change the current screen
1010
  global $current_screen;
@@ -1016,12 +1020,53 @@ class Codepress_Admin_Columns
1016
  // ...so we can get its columns
1017
  $columns = WP_Posts_List_Table::get_columns();
1018
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1019
  // we remove the checkbox column as an option...
1020
  unset($columns['cb']);
1021
 
1022
  // change to uniform format
1023
  $uniform_columns = array();
1024
- foreach ( $columns as $key => $label ) {
1025
  $hide_options = false;
1026
  $type_label = $label;
1027
 
@@ -1030,8 +1075,8 @@ class Codepress_Admin_Columns
1030
  $type_label = __('Comments', $this->textdomain);
1031
  $hide_options = true;
1032
  }
1033
-
1034
- $uniform_colums[$key] = array(
1035
  'label' => $label,
1036
  'state' => 'on',
1037
  'options' => array(
@@ -1041,96 +1086,78 @@ class Codepress_Admin_Columns
1041
  )
1042
  );
1043
  }
1044
-
1045
- // reset current screen
1046
- $current_screen = $org_current_screen;
1047
-
1048
  return $uniform_colums;
1049
  }
1050
-
1051
  /**
1052
- * Add extra columns
1053
  *
1054
  * @since 1.0
1055
  */
1056
- private function get_custom_columns($post_type)
1057
  {
1058
  $custom_columns = array();
1059
 
1060
- // default arguments
1061
- $defaults = array(
1062
- 'label' => '',
1063
- 'sortorder' => '',
1064
- 'state' => '',
1065
-
1066
- // options are static
1067
- 'options' => array(
1068
- 'type_label' => __('Custom', $this->textdomain),
1069
- 'hide_options' => false,
1070
- 'class' => 'cpac-box-custom',
1071
- )
1072
- );
1073
-
1074
  // Thumbnail support
1075
  if ( post_type_supports($post_type, 'thumbnail') ) {
1076
- $custom_columns['column-featured_image'] = wp_parse_args( array(
1077
  'label' => __('Featured Image', $this->textdomain),
1078
  'options' => array(
1079
  'type_label' => __('Image', $this->textdomain)
1080
  )
1081
- ), $defaults);
1082
  }
1083
 
1084
  // Excerpt support
1085
  if ( post_type_supports($post_type, 'editor') ) {
1086
- $custom_columns['column-excerpt'] = wp_parse_args( array(
1087
  'label' => __('Excerpt', $this->textdomain),
1088
  'options' => array(
1089
  'type_label' => __('Excerpt', $this->textdomain)
1090
  )
1091
- ), $defaults);
1092
  }
1093
 
1094
  // Sticky support
1095
  if ( $post_type == 'post' ) {
1096
- $custom_columns['column-sticky'] = wp_parse_args( array(
1097
  'label' => __('Sticky', $this->textdomain),
1098
  'options' => array(
1099
  'type_label' => __('Sticky', $this->textdomain)
1100
  )
1101
- ), $defaults);
1102
  }
1103
 
1104
  // Order support
1105
  if ( post_type_supports($post_type, 'page-attributes') ) {
1106
- $custom_columns['column-order'] = wp_parse_args( array(
1107
- 'label' => __('Page Order', $this->textdomain),
1108
- 'sortorder' => 'on',
1109
  'options' => array(
1110
- 'type_label' => __('Order', $this->textdomain)
 
1111
  )
1112
- ), $defaults);
1113
  }
1114
 
1115
  // Page Template
1116
  if ( $post_type == 'page' ) {
1117
- $custom_columns['column-page-template'] = wp_parse_args( array(
1118
  'label' => __('Page Template', $this->textdomain),
1119
- 'sortorder' => 'on',
1120
  'options' => array(
1121
- 'type_label' => __('Page Template', $this->textdomain)
 
1122
  )
1123
- ), $defaults);
1124
  }
1125
 
1126
  // Post Formats
1127
  if ( post_type_supports($post_type, 'post-formats') ) {
1128
- $custom_columns['column-post_formats'] = wp_parse_args( array(
1129
  'label' => __('Post Format', $this->textdomain),
1130
  'options' => array(
1131
  'type_label' => __('Post Format', $this->textdomain)
1132
  )
1133
- ), $defaults);
1134
  }
1135
 
1136
  // Taxonomy support
@@ -1138,57 +1165,157 @@ class Codepress_Admin_Columns
1138
  if ( $taxonomies ) {
1139
  foreach ( $taxonomies as $tax_slug => $tax ) {
1140
  if ( $tax_slug != 'post_tag' && $tax_slug != 'category' && $tax_slug != 'post_format' ) {
1141
- $custom_columns['column-taxonomy-'.$tax->name] = wp_parse_args( array(
1142
  'label' => $tax->label,
1143
  'options' => array(
1144
  'type_label' => __('Taxonomy', $this->textdomain)
1145
  )
1146
- ), $defaults);
1147
  }
1148
  }
1149
  }
1150
 
1151
  // Post ID support
1152
- $custom_columns['column-postid'] = wp_parse_args( array(
1153
- 'label' => 'ID',
1154
- 'sortorder' => 'on',
1155
  'options' => array(
1156
  'type_label' => 'ID',
 
1157
  )
1158
- ), $defaults);
1159
 
1160
  // Slug support
1161
- $custom_columns['column-page-slug'] = wp_parse_args( array(
1162
  'label' => __('Slug', $this->textdomain),
1163
- 'sortorder' => 'on',
1164
  'options' => array(
1165
  'type_label' => __('Slug', $this->textdomain),
 
 
 
 
 
 
 
 
 
1166
  )
1167
- ), $defaults);
1168
 
1169
  // Attachment support
1170
- $custom_columns['column-attachment'] = wp_parse_args( array(
1171
  'label' => __('Attachment', $this->textdomain),
1172
- 'sortorder' => 'on',
1173
  'options' => array(
1174
- 'type_label' => __('Attachment', $this->textdomain)
 
1175
  )
1176
- ), $defaults);
1177
 
1178
  // Custom Field support
1179
  if ( $this->get_postmeta_by_posttype($post_type) ) {
1180
- $custom_columns['column-meta-1'] = wp_parse_args( array(
1181
  'label' => __('Custom Field', $this->textdomain),
1182
  'field' => '',
1183
  'field_type' => '',
 
 
1184
  'options' => array(
1185
  'type_label' => __('Field', $this->textdomain),
1186
- 'class' => 'cpac-box-metafield'
 
1187
  )
1188
- ), $defaults);
1189
  }
1190
 
1191
- return apply_filters('cpac-custom-columns', $custom_columns);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1192
  }
1193
 
1194
  /**
@@ -1196,14 +1323,14 @@ class Codepress_Admin_Columns
1196
  *
1197
  * @since 1.0
1198
  */
1199
- private function get_db_columns($post_type)
1200
  {
1201
  // get plugin options
1202
  $options = $this->options;
1203
 
1204
  // get saved columns
1205
- if ( isset($options['columns'][$post_type]) )
1206
- return $options['columns'][$post_type];
1207
 
1208
  return false;
1209
  }
@@ -1213,7 +1340,7 @@ class Codepress_Admin_Columns
1213
  *
1214
  * @since 1.0
1215
  */
1216
- private function get_post_type_menu()
1217
  {
1218
  // set
1219
  $menu = '';
@@ -1225,16 +1352,16 @@ class Codepress_Admin_Columns
1225
  $referer = $_REQUEST['cpac_type'];
1226
 
1227
  // loop
1228
- foreach ( $this->post_types as $post_type ) {
1229
- $label = $this->get_singular_name($post_type);
1230
- $clean_label = $this->sanitize_string($post_type);
1231
 
1232
  // divider
1233
  $divider = $count++ == 1 ? '' : ' | ';
1234
 
1235
  // current
1236
  $current = '';
1237
- if ( $this->is_menu_type_current($post_type) )
1238
  $current = ' class="current"';
1239
 
1240
  // menu list
@@ -1258,9 +1385,7 @@ class Codepress_Admin_Columns
1258
  * @since 1.0
1259
  */
1260
  private function is_menu_type_current( $post_type )
1261
- {
1262
- //print_r($post_type);
1263
-
1264
  // referer
1265
  $referer = '';
1266
  if ( ! empty($_REQUEST['cpac_type']) )
@@ -1292,10 +1417,18 @@ class Codepress_Admin_Columns
1292
  *
1293
  * @since 1.0
1294
  */
1295
- private function get_singular_name( $post_type )
1296
  {
1297
- $posttype_obj = get_post_type_object($post_type);
1298
- $label = $posttype_obj->labels->singular_name;
 
 
 
 
 
 
 
 
1299
  return $label;
1300
  }
1301
 
@@ -1306,25 +1439,59 @@ class Codepress_Admin_Columns
1306
  */
1307
  public function handle_requests_orderby_column( $vars )
1308
  {
1309
- if ( isset( $vars['orderby'] ) ) {
1310
- // get saved columns
1311
- $db_columns = $this->get_db_columns($vars['post_type']);
1312
 
1313
- // Column Page Order
1314
- if ( isset($db_columns['column-order']) ) {
1315
-
1316
- // sanitizing label
1317
- $label = $this->sanitize_string($db_columns['column-order']['label']);
1318
 
1319
- // Check for Page Order
1320
- if ( $vars['orderby'] == $label ) {
1321
  $vars['orderby'] = 'menu_order';
1322
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1323
  }
1324
  }
1325
  return $vars;
1326
  }
1327
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1328
  /**
1329
  * Sanitize label
1330
  *
@@ -1339,7 +1506,7 @@ class Codepress_Admin_Columns
1339
  }
1340
 
1341
  /**
1342
- * Get a url to a file in this plugin.
1343
  *
1344
  * @since 1.0
1345
  */
@@ -1348,6 +1515,19 @@ class Codepress_Admin_Columns
1348
  return plugins_url($file, __FILE__);
1349
  }
1350
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1351
  /**
1352
  * Get a thumbnail
1353
  *
@@ -1365,6 +1545,125 @@ class Codepress_Admin_Columns
1365
  $image = str_replace( WP_CONTENT_DIR, WP_CONTENT_URL, $new);
1366
 
1367
  return "<img src='{$image}' alt='' width='120' height='80' />";
1368
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1369
  }
1370
  ?>
1
  <?php
2
  /*
3
  Plugin Name: Codepress Admin Columns
4
+ Version: 1.1.1
5
+ Description: This plugin makes it easy to Manage Custom Columns for your Posts, Pages and Custom Post Type Screens.
6
+ Author: Codepress
7
  Author URI: http://www.codepress.nl
8
  Plugin URI: http://www.codepress.nl/plugins/codepress-admin-columns/
9
  Text Domain: codepress-admin-columns
26
  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
27
  */
28
 
29
+ define( 'CPAC_VERSION', '1.1.1' );
30
 
31
  /**
32
  * Init Class
73
  $this->handle_requests();
74
  $this->options = get_option('cpac_options');
75
  $this->options_default = get_option('cpac_options_default');
76
+
77
  // slug
78
  $this->slug = 'codepress-admin-columns';
79
  $this->textdomain = 'codepress-admin-columns';
81
  // translations
82
  load_plugin_textdomain( $this->textdomain, false, dirname( plugin_basename( __FILE__ ) ) . '/languages/' );
83
 
84
+ // actions and hooks
85
  add_action( 'admin_menu', array( &$this, 'settings_menu') );
86
  add_action( 'admin_init', array( &$this, 'register_settings') );
87
  add_action( 'admin_init', array( &$this, 'register_columns' ) );
88
  add_action( 'admin_enqueue_scripts', array( &$this, 'admin_enqueue_scripts') );
89
+ add_action( 'manage_pages_custom_column', array( &$this, 'manage_posts_column_value'), 10, 2 );
90
+ add_action( 'manage_posts_custom_column', array( &$this, 'manage_posts_column_value'), 10, 2 );
91
+ add_action( 'manage_users_custom_column', array( &$this, 'manage_users_column_value'), 10, 3 );
92
+ add_action( 'admin_print_styles' , array( &$this, 'column_styles') );
93
  add_filter( 'request', array( &$this, 'handle_requests_orderby_column') );
94
  add_filter( 'plugin_action_links', array( &$this, 'add_settings_link'), 10, 2);
95
  }
141
  */
142
  public function register_columns()
143
  {
144
+ /** Posts */
145
  foreach ( $this->post_types as $post_type ) {
146
 
147
  // register column per post type
148
+ add_filter("manage_edit-{$post_type}_columns", array(&$this, 'callback_add_posts_column'));
149
 
150
  // register column as sortable
151
+ add_filter( "manage_edit-{$post_type}_sortable_columns", array(&$this, 'callback_add_sortable_posts_column'));
152
  }
153
+
154
+ /** Users */
155
+ add_filter( "manage_users_columns", array(&$this, 'callback_add_users_column'));
156
+ add_filter( "manage_users_sortable_columns", array(&$this, 'callback_add_sortable_users_column') );
157
  }
158
 
159
  /**
160
+ * Callback add Posts Column
161
  *
162
  * @since 1.0
163
  */
164
+ public function callback_add_posts_column($columns)
165
  {
166
  global $post_type;
 
167
 
168
+ return $this->add_managed_columns($post_type, $columns);
169
+ }
170
+
171
+ /**
172
+ * Callback add Users column
173
+ *
174
+ * @since 1.1
175
+ */
176
+ public function callback_add_users_column($columns)
177
+ {
178
+ return $this->add_managed_columns('wp-users', $columns);
179
  }
180
 
181
  /**
182
+ * Add managed columns by Type
183
  *
184
+ * @since 1.1
185
  */
186
+ private function add_managed_columns( $type = 'post', $columns )
187
  {
188
+ $db_columns = $this->get_stored_columns($type);
189
+
190
+ if ( !$db_columns )
191
+ return $columns;
192
+
193
+ // set already loaded columns by plugins
194
+ $set_columns = $this->filter_preset_columns($columns, $type);
195
+
196
+ // loop through columns
197
+ foreach ( $db_columns as $id => $values ) {
198
+
199
+ // is active
200
+ if ( isset($values['state']) && $values['state'] == 'on' ){
201
+
202
+ // register format
203
+ $set_columns[$id] = $values['label'];
204
+ }
205
+ }
206
+
207
+ return $set_columns;
208
  }
209
 
210
  /**
211
+ * Callback add Posts sortable column
212
  *
213
+ * @since 1.0
214
+ */
215
+ public function callback_add_sortable_posts_column($columns)
216
+ {
217
+ global $post_type;
218
+
219
+ return $this->add_managed_sortable_columns($post_type, $columns);
220
+ }
221
+
222
+ /**
223
+ * Callback add Users sortable column
224
  *
225
+ * @since 1.1
226
  */
227
+ public function callback_add_sortable_users_column($columns)
228
  {
229
+ return $this->add_managed_sortable_columns('wp-users', $columns);
230
+ }
231
+
232
+ /**
233
+ * Add managed sortable columns by Type
234
+ *
235
+ * @since 1.1
236
+ */
237
+ private function add_managed_sortable_columns( $type = 'post', $columns )
238
+ {
239
+ $display_columns = $this->get_merged_columns($type);
 
 
 
 
240
 
241
+ if ( ! $display_columns )
242
+ return $columns;
 
 
 
 
 
 
 
 
 
 
 
 
 
243
 
244
+ foreach ( $display_columns as $id => $vars ) {
245
+ if ( isset($vars['options']['sortorder']) && $vars['options']['sortorder'] == 'on' ){
246
+
247
+ // register format
248
+ $columns[$id] = $this->sanitize_string($vars['label']);
249
+ }
250
+ }
251
+ return $columns;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
252
  }
253
+
254
  /**
255
  * Get a list of Column options per post type
256
  *
257
  * @since 1.0
258
  */
259
+ private function get_column_boxes($type)
260
  {
261
  // merge all columns
262
+ $display_columns = $this->get_merged_columns($type);
263
 
264
  // define
265
  $list = '';
266
 
267
  // loop throught the active columns
268
  if ( $display_columns ) {
269
+ foreach ( $display_columns as $id => $values ) {
270
 
271
  // add items to the list
272
+ $list .= $this->get_box($type, $id, $values);
273
 
274
  }
275
  }
276
 
277
  // custom field button
278
  $button_add_column = '';
279
+ if ( $this->get_postmeta_by_posttype($type) )
280
  $button_add_column = "<a href='javacript:;' class='cpac-add-customfield-column button'>+ " . __('Add Custom Field Column') . "</a>";
281
 
282
  return "
295
  *
296
  * @since 1.0
297
  */
298
+ private function get_merged_columns( $type )
299
  {
300
  //get saved database columns
301
+ $db_columns = $this->get_stored_columns($type);
 
 
 
302
 
303
+ /** Users */
304
+ if ( $type == 'wp-users' ) {
305
+ $wp_default_columns = $this->get_wp_default_users_columns();
306
+ $wp_custom_columns = $this->get_custom_users_columns();
307
+ }
308
 
309
+ /** Posts */
310
+ else {
311
+ $wp_default_columns = $this->get_wp_default_posts_columns($type);
312
+ $wp_custom_columns = $this->get_custom_posts_columns($type);
313
+ }
314
+
315
+ // merge columns
316
+ $posts_columns = wp_parse_args($wp_custom_columns, $wp_default_columns);
317
+
318
  // loop throught the active columns
319
  if ( $db_columns ) {
320
+ foreach ( $db_columns as $id => $values ) {
321
 
322
  // get column meta options from custom columns
323
+ if ( $this->is_column_meta($id) )
324
+ $db_columns[$id]['options'] = $wp_custom_columns['column-meta-1']['options'];
325
 
326
  // add static options
327
  else
328
+ $db_columns[$id]['options'] = $posts_columns[$id]['options'];
329
 
330
+ unset($posts_columns[$id]);
331
  }
332
  }
333
 
334
  // merge all
335
+ $display_columns = wp_parse_args($db_columns, $posts_columns);
336
+
337
  return $display_columns;
338
  }
339
+
 
340
  /**
341
  * Get checkbox
342
  *
343
  * @since 1.0
344
  */
345
+ private function get_box($post_type, $id, $values)
346
  {
347
  $classes = array();
348
 
349
  // set state
350
  $state = isset($values['state']) ? $values['state'] : '';
351
 
 
 
 
352
  // class
353
+ $classes[] = "cpac-box-{$id}";
354
  if ( $state )
355
  $classes[] = 'active';
356
  if ( ! empty($values['options']['class']) )
358
  $class = implode(' ', $classes);
359
 
360
  // more box options
361
+ $more_options = $this->get_additional_box_options($post_type, $id, $values);
362
  $action = "<a class='cpac-action' href='#open'>open</a>";
363
 
364
  // hide box options
372
  <div class='cpac-type-options'>
373
 
374
  <div class='cpac-checkbox'></div>
375
+ <input type='hidden' class='cpac-state' name='cpac_options[columns][{$post_type}][{$id}][state]' value='{$state}'/>
 
376
  <label class='main-label'>{$values['label']}</label>
377
  </div>
378
  <div class='cpac-meta-title'>
380
  <span>{$values['options']['type_label']}</span>
381
  </div>
382
  <div class='cpac-type-inside'>
383
+ <label for='cpac_options[columns][{$post_type}][{$id}][label]'>Label: </label>
384
+ <input type='text' name='cpac_options[columns][{$post_type}][{$id}][label]' value='{$values['label']}' class='text'/>
385
  <br/>
386
  {$more_options}
387
  </div>
396
  *
397
  * @since 1.0
398
  */
399
+ private function get_additional_box_options($post_type, $id, $values)
400
  {
401
  $fields = '';
402
 
403
  // Custom Fields
404
+ if ( $this->is_column_meta($id) )
405
+ $fields .= $this->get_box_options_customfields($post_type, $id, $values);
406
 
407
  return $fields;
408
  }
412
  *
413
  * @since 1.0
414
  */
415
+ private function get_box_options_customfields($post_type, $id, $values)
416
  {
417
  // get post meta fields
418
  $fields = $this->get_postmeta_by_posttype($post_type);
442
  'library_id' => __('Media Library Icon', $this->textdomain),
443
  'excerpt' => __('Excerpt'),
444
  'array' => __('Multiple Values', $this->textdomain),
445
+ 'numeric' => __('Numeric', $this->textdomain),
446
  );
447
 
448
+ // add filter
449
+ $fieldtypes = apply_filters('cpac-field-types', $fieldtypes );
450
+
451
+ // set select options
452
  foreach ( $fieldtypes as $fkey => $fieldtype ) {
453
  $fieldtype_options .= sprintf
454
  (
459
  );
460
  }
461
 
462
+ // before and after string
463
+ $before = ! empty($values['before']) ? $values['before'] : '' ;
464
+ $after = ! empty($values['after']) ? $values['after'] : '' ;
465
+
466
  if ( empty($field_options) )
467
  return false;
468
 
469
  // add remove button
470
  $remove = '<p class="remove-description description">'.__('This field can not be removed', $this->textdomain).'</p>';
471
+ if ( $id != 'column-meta-1') {
472
  $remove = "
473
  <p>
474
  <a href='javascript:;' class='cpac-delete-custom-field-box'>".__('Remove')."</a>
477
  }
478
 
479
  $inside = "
480
+ <label for='cpac_options[columns][{$post_type}][{$id}][field]'>Custom Field: </label>
481
+ <select name='cpac_options[columns][{$post_type}][{$id}][field]'>{$field_options}</select>
482
  <br/>
483
+ <label for='cpac_options[columns][{$post_type}][{$id}][field_type]'>Field Type: </label>
484
+ <select name='cpac_options[columns][{$post_type}][{$id}][field_type]'>{$fieldtype_options}</select>
485
  <br/>
486
+ <label for='cpac_options[columns][{$post_type}][{$id}][before]'>Before: </label>
487
+ <input type='text' class='cpac-before' name='cpac_options[columns][{$post_type}][{$id}][before]' value='{$before}'/>
488
+ <br/>
489
+ <label for='cpac_options[columns][{$post_type}][{$id}][before]'>After: </label>
490
+ <input type='text' class='cpac-after' name='cpac_options[columns][{$post_type}][{$id}][after]' value='{$after}'/>
491
+ <br/>
492
  {$remove}
493
  ";
494
 
534
  wp_enqueue_script( 'jquery-ui-sortable' );
535
  wp_enqueue_script( 'cpac-admin', $this->plugin_url('/assets/js/admin-column.js'), array('jquery', 'jquery-ui-sortable'), CPAC_VERSION );
536
  }
537
+
538
+ /**
539
+ * Get column types
540
+ *
541
+ * @since 1.1
542
+ */
543
+ private function get_types()
544
+ {
545
+ $types = $this->post_types;
546
+ $types['wp-users'] = 'wp-users';
547
+
548
+ return $types;
549
+ }
550
+
551
  /**
552
  * Get post types
553
  *
634
 
635
  // stores the default columns that are set by WP or set in the theme.
636
  $wp_default_columns = array();
637
+
638
+ // Posts
639
  foreach ( $this->post_types as $post_type ) {
640
+ $wp_default_columns[$post_type] = $this->get_wp_default_posts_columns($post_type);
641
  }
642
+
643
+ // Users
644
+ $wp_default_columns['wp-users'] = $this->get_wp_default_users_columns();
645
+
646
  update_option( 'cpac_options_default', $wp_default_columns );
647
  }
648
 
709
  *
710
  * @since 1.0
711
  */
712
+ public function manage_posts_column_value($column_name, $post_id)
713
  {
714
+ $type = $column_name;
715
 
716
  // Check for taxonomies, such as column-taxonomy-[taxname]
717
  if ( strpos($type, 'column-taxonomy-') !== false )
718
  $type = 'column-taxonomy';
719
 
720
  // Check for custom fields, such as column-meta-[customfieldname]
721
+ if ( $this->is_column_meta($type) )
722
  $type = 'column-meta';
723
 
724
  // Hook
725
+ do_action('cpac-manage-column', $type, $column_name, $post_id);
726
 
727
  // Switch Types
728
  $result = '';
776
  $result = get_post($post_id)->post_name;
777
  break;
778
 
779
+ // Slug
780
+ case "column-word-count" :
781
+ $result = str_word_count( strip_tags( get_post($post_id)->post_content ) );
782
+ break;
783
+
784
  // Taxonomy
785
  case "column-taxonomy" :
786
+ $tax = str_replace('column-taxonomy-', '', $column_name);
787
  $tags = get_the_terms($post_id, $tax);
788
  $tarr = array();
789
  if ( $tax == 'post_format' && empty($tags) ) {
799
 
800
  // Custom Field
801
  case "column-meta" :
802
+ $result = $this->get_column_value_custom_field($post_id, $column_name);
803
  break;
804
 
805
  // Attachment
808
  break;
809
 
810
  default :
811
+ $result = get_post_meta( $post_id, $column_name, true );
812
 
813
  endswitch;
814
 
817
 
818
  echo $result;
819
  }
820
+
821
+ /**
822
+ * Manage custom column for Users.
823
+ *
824
+ * @since 1.1
825
+ */
826
+ public function manage_users_column_value( $val, $column_name, $user_id )
827
+ {
828
+ $type = $column_name;
829
+
830
+ $userdata = get_userdata( $user_id );
831
+
832
+ if ( ! $userdata )
833
+ return false;
834
+
835
+ $result = '';
836
+ switch ($type) :
837
+
838
+ // user id
839
+ case "column-user_id" :
840
+ $result = $user_id;
841
+ break;
842
+
843
+ // first name
844
+ case "column-first_name" :
845
+ $result = $userdata->first_name;
846
+ break;
847
+
848
+ // last name
849
+ case "column-last_name" :
850
+ $result = $userdata->last_name;
851
+ break;
852
+
853
+ // user url
854
+ case "column-user_url" :
855
+ $result = $userdata->user_url;
856
+ break;
857
+
858
+ // user url
859
+ case "column-user_registered" :
860
+ $result = $userdata->user_registered;
861
+ break;
862
+
863
+ default :
864
+ $result = get_user_meta( $user_id, $column_name, true );
865
+
866
+ endswitch;
867
+
868
+ if ( empty($result) )
869
+ $result = '&nbsp;';
870
+
871
+ return $result;
872
+ }
873
 
874
  /**
875
  * Get column value of post attachments
876
  *
877
  * @since 1.0
878
  */
879
+ private function get_column_value_attachments( $post_id )
880
  {
881
  $result = '';
882
  $attachments = get_posts(array(
898
  *
899
  * @since 1.0
900
  */
901
+ private function get_column_value_custom_field($post_id, $id)
902
  {
903
+ $columns = $this->get_stored_columns( get_post_type($post_id) );
904
+
905
+ // inputs
906
+ $field = isset($columns[$id]['field']) ? $columns[$id]['field'] : '';
907
+ $fieldtype = isset($columns[$id]['field_type']) ? $columns[$id]['field_type'] : '';
908
+ $before = isset($columns[$id]['before']) ? $columns[$id]['before'] : '';
909
+ $after = isset($columns[$id]['after']) ? $columns[$id]['after'] : '';
910
 
911
  // Get meta field value
912
  $meta = get_post_meta($post_id, $field, true);
942
 
943
  endswitch;
944
 
945
+ // add before and after string
946
+ $meta = "{$before}{$meta}{$after}";
947
+
948
  return $meta;
949
  }
950
 
963
  $retVal[] = $r_pieces;
964
  }
965
  }
966
+ if ( isset($retVal) && is_array($retVal) )
967
+ return implode( $glue, $retVal );
 
 
 
 
 
 
 
 
 
968
 
969
+ return false;
970
+ }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
971
 
972
  /**
973
  * Set columns. These columns apply either for every post or set by a plugin.
974
  *
975
  * @since 1.0
976
  */
977
+ private function filter_preset_columns($columns, $type = 'post')
978
  {
979
  $options = $this->options_default;
980
 
982
  return $columns;
983
 
984
  // we use the wp default columns for filtering...
985
+ $db_columns = $options[$type];
986
 
987
  // ... the ones that are set by plugins, theme functions and such.
988
  $dif_columns = array_diff(array_keys($columns), array_keys($db_columns));
996
  }
997
 
998
  return $pre_columns;
999
+ }
1000
 
1001
  /**
1002
+ * Get WP default supported admin columns per post type.
1003
  *
1004
  * @since 1.0
1005
  */
1006
+ private function get_wp_default_posts_columns($post_type = 'post')
1007
  {
1008
+ // load some dependencies
1009
+ require_once(ABSPATH . 'wp-admin/includes/template.php');
1010
+ require_once(ABSPATH . 'wp-admin/includes/class-wp-list-table.php');
1011
+ require_once(ABSPATH . 'wp-admin/includes/class-wp-posts-list-table.php');
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1012
 
1013
  // we need to change the current screen
1014
  global $current_screen;
1020
  // ...so we can get its columns
1021
  $columns = WP_Posts_List_Table::get_columns();
1022
 
1023
+ if ( empty ( $columns ) )
1024
+ return false;
1025
+
1026
+ // change to uniform format
1027
+ $posts_columns = $this->get_uniform_format($columns);
1028
+
1029
+ // reset current screen
1030
+ $current_screen = $org_current_screen;
1031
+
1032
+ return $posts_columns;
1033
+ }
1034
+
1035
+ /**
1036
+ * Get WP default users columns per post type.
1037
+ *
1038
+ * @since 1.0
1039
+ */
1040
+ private function get_wp_default_users_columns()
1041
+ {
1042
+ require_once(ABSPATH . 'wp-admin/includes/class-wp-list-table.php');
1043
+ require_once(ABSPATH . 'wp-admin/includes/class-wp-users-list-table.php');
1044
+
1045
+ // turn off site users
1046
+ $this->is_site_users = false;
1047
+
1048
+ // get users columns
1049
+ $columns = WP_Users_List_Table::get_columns();
1050
+
1051
+ // change to uniform format
1052
+ $users_columns = $this->get_uniform_format($columns);
1053
+
1054
+ return $users_columns;
1055
+ }
1056
+
1057
+ /**
1058
+ * Build uniform format for all columns
1059
+ *
1060
+ * @since 1.0
1061
+ */
1062
+ private function get_uniform_format($columns)
1063
+ {
1064
  // we remove the checkbox column as an option...
1065
  unset($columns['cb']);
1066
 
1067
  // change to uniform format
1068
  $uniform_columns = array();
1069
+ foreach ( (array) $columns as $id => $label ) {
1070
  $hide_options = false;
1071
  $type_label = $label;
1072
 
1075
  $type_label = __('Comments', $this->textdomain);
1076
  $hide_options = true;
1077
  }
1078
+
1079
+ $uniform_colums[$id] = array(
1080
  'label' => $label,
1081
  'state' => 'on',
1082
  'options' => array(
1086
  )
1087
  );
1088
  }
 
 
 
 
1089
  return $uniform_colums;
1090
  }
1091
+
1092
  /**
1093
+ * Custom posts columns
1094
  *
1095
  * @since 1.0
1096
  */
1097
+ private function get_custom_posts_columns($post_type)
1098
  {
1099
  $custom_columns = array();
1100
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1101
  // Thumbnail support
1102
  if ( post_type_supports($post_type, 'thumbnail') ) {
1103
+ $custom_columns['column-featured_image'] = array(
1104
  'label' => __('Featured Image', $this->textdomain),
1105
  'options' => array(
1106
  'type_label' => __('Image', $this->textdomain)
1107
  )
1108
+ );
1109
  }
1110
 
1111
  // Excerpt support
1112
  if ( post_type_supports($post_type, 'editor') ) {
1113
+ $custom_columns['column-excerpt'] = array(
1114
  'label' => __('Excerpt', $this->textdomain),
1115
  'options' => array(
1116
  'type_label' => __('Excerpt', $this->textdomain)
1117
  )
1118
+ );
1119
  }
1120
 
1121
  // Sticky support
1122
  if ( $post_type == 'post' ) {
1123
+ $custom_columns['column-sticky'] = array(
1124
  'label' => __('Sticky', $this->textdomain),
1125
  'options' => array(
1126
  'type_label' => __('Sticky', $this->textdomain)
1127
  )
1128
+ );
1129
  }
1130
 
1131
  // Order support
1132
  if ( post_type_supports($post_type, 'page-attributes') ) {
1133
+ $custom_columns['column-order'] = array(
1134
+ 'label' => __('Page Order', $this->textdomain),
 
1135
  'options' => array(
1136
+ 'type_label' => __('Order', $this->textdomain),
1137
+ 'sortorder' => 'on',
1138
  )
1139
+ );
1140
  }
1141
 
1142
  // Page Template
1143
  if ( $post_type == 'page' ) {
1144
+ $custom_columns['column-page-template'] = array(
1145
  'label' => __('Page Template', $this->textdomain),
 
1146
  'options' => array(
1147
+ 'type_label' => __('Page Template', $this->textdomain),
1148
+ 'sortorder' => 'on',
1149
  )
1150
+ );
1151
  }
1152
 
1153
  // Post Formats
1154
  if ( post_type_supports($post_type, 'post-formats') ) {
1155
+ $custom_columns['column-post_formats'] = array(
1156
  'label' => __('Post Format', $this->textdomain),
1157
  'options' => array(
1158
  'type_label' => __('Post Format', $this->textdomain)
1159
  )
1160
+ );
1161
  }
1162
 
1163
  // Taxonomy support
1165
  if ( $taxonomies ) {
1166
  foreach ( $taxonomies as $tax_slug => $tax ) {
1167
  if ( $tax_slug != 'post_tag' && $tax_slug != 'category' && $tax_slug != 'post_format' ) {
1168
+ $custom_columns['column-taxonomy-'.$tax->name] = array(
1169
  'label' => $tax->label,
1170
  'options' => array(
1171
  'type_label' => __('Taxonomy', $this->textdomain)
1172
  )
1173
+ );
1174
  }
1175
  }
1176
  }
1177
 
1178
  // Post ID support
1179
+ $custom_columns['column-postid'] = array(
1180
+ 'label' => 'ID',
 
1181
  'options' => array(
1182
  'type_label' => 'ID',
1183
+ 'sortorder' => 'on',
1184
  )
1185
+ );
1186
 
1187
  // Slug support
1188
+ $custom_columns['column-page-slug'] = array(
1189
  'label' => __('Slug', $this->textdomain),
 
1190
  'options' => array(
1191
  'type_label' => __('Slug', $this->textdomain),
1192
+ 'sortorder' => 'on',
1193
+ )
1194
+ );
1195
+
1196
+ // Word count support
1197
+ $custom_columns['column-word-count'] = array(
1198
+ 'label' => __('Word count', $this->textdomain),
1199
+ 'options' => array(
1200
+ 'type_label' => __('Word count', $this->textdomain),
1201
  )
1202
+ );
1203
 
1204
  // Attachment support
1205
+ $custom_columns['column-attachment'] = array(
1206
  'label' => __('Attachment', $this->textdomain),
 
1207
  'options' => array(
1208
+ 'type_label' => __('Attachment', $this->textdomain),
1209
+ 'sortorder' => 'on',
1210
  )
1211
+ );
1212
 
1213
  // Custom Field support
1214
  if ( $this->get_postmeta_by_posttype($post_type) ) {
1215
+ $custom_columns['column-meta-1'] = array(
1216
  'label' => __('Custom Field', $this->textdomain),
1217
  'field' => '',
1218
  'field_type' => '',
1219
+ 'before' => '',
1220
+ 'after' => '',
1221
  'options' => array(
1222
  'type_label' => __('Field', $this->textdomain),
1223
+ 'class' => 'cpac-box-metafield',
1224
+ 'sortorder' => 'on',
1225
  )
1226
+ );
1227
  }
1228
 
1229
+ // merge with defaults
1230
+ $custom_columns = $this->parse_defaults($custom_columns);
1231
+
1232
+ return apply_filters('cpac-custom-posts-columns', $custom_columns);
1233
+ }
1234
+
1235
+ /**
1236
+ * Custom users columns
1237
+ *
1238
+ * @since 1.1
1239
+ */
1240
+ private function get_custom_users_columns()
1241
+ {
1242
+ $custom_columns = array();
1243
+
1244
+ // User ID
1245
+ $custom_columns['column-user_id'] = array(
1246
+ 'label' => __('User ID', $this->textdomain),
1247
+ 'options' => array(
1248
+ 'type_label' => __('User ID', $this->textdomain),
1249
+ 'sortorder' => 'on'
1250
+ )
1251
+ );
1252
+
1253
+ // First name
1254
+ $custom_columns['column-first_name'] = array(
1255
+ 'label' => __('First name', $this->textdomain),
1256
+ 'options' => array(
1257
+ 'type_label' => __('First name', $this->textdomain),
1258
+ )
1259
+ );
1260
+
1261
+ // Last name
1262
+ $custom_columns['column-last_name'] = array(
1263
+ 'label' => __('Last name', $this->textdomain),
1264
+ 'options' => array(
1265
+ 'type_label' => __('Last name', $this->textdomain),
1266
+ )
1267
+ );
1268
+
1269
+ // User url
1270
+ $custom_columns['column-user_url'] = array(
1271
+ 'label' => __('Url', $this->textdomain),
1272
+ 'options' => array(
1273
+ 'type_label' => __('Url', $this->textdomain),
1274
+ )
1275
+ );
1276
+
1277
+ // User url
1278
+ $custom_columns['column-user_registered'] = array(
1279
+ 'label' => __('Registered', $this->textdomain),
1280
+ 'options' => array(
1281
+ 'type_label' => __('Registered', $this->textdomain),
1282
+ )
1283
+ );
1284
+
1285
+ // merge with defaults
1286
+ $custom_columns = $this->parse_defaults($custom_columns);
1287
+
1288
+ return apply_filters('cpac-custom-users-columns', $custom_columns);
1289
+ }
1290
+
1291
+ /**
1292
+ * Parse defaults
1293
+ *
1294
+ * @since 1.1
1295
+ */
1296
+ private function parse_defaults($columns)
1297
+ {
1298
+ // default arguments
1299
+ $defaults = array(
1300
+
1301
+ // stored values
1302
+ 'label' => '',
1303
+ 'state' => '',
1304
+
1305
+ // static values
1306
+ 'options' => array(
1307
+ 'type_label' => __('Custom', $this->textdomain),
1308
+ 'hide_options' => false,
1309
+ 'class' => 'cpac-box-custom',
1310
+ 'sortorder' => '',
1311
+ )
1312
+ );
1313
+
1314
+ foreach ( $columns as $k => $column ) {
1315
+ $c[$k] = wp_parse_args( $column, $defaults);
1316
+ }
1317
+
1318
+ return $c;
1319
  }
1320
 
1321
  /**
1323
  *
1324
  * @since 1.0
1325
  */
1326
+ private function get_stored_columns($type)
1327
  {
1328
  // get plugin options
1329
  $options = $this->options;
1330
 
1331
  // get saved columns
1332
+ if ( isset($options['columns'][$type]) )
1333
+ return $options['columns'][$type];
1334
 
1335
  return false;
1336
  }
1340
  *
1341
  * @since 1.0
1342
  */
1343
+ private function get_menu()
1344
  {
1345
  // set
1346
  $menu = '';
1352
  $referer = $_REQUEST['cpac_type'];
1353
 
1354
  // loop
1355
+ foreach ( $this->get_types() as $type ) {
1356
+ $label = $this->get_singular_name($type);
1357
+ $clean_label = $this->sanitize_string($type);
1358
 
1359
  // divider
1360
  $divider = $count++ == 1 ? '' : ' | ';
1361
 
1362
  // current
1363
  $current = '';
1364
+ if ( $this->is_menu_type_current($type) )
1365
  $current = ' class="current"';
1366
 
1367
  // menu list
1385
  * @since 1.0
1386
  */
1387
  private function is_menu_type_current( $post_type )
1388
+ {
 
 
1389
  // referer
1390
  $referer = '';
1391
  if ( ! empty($_REQUEST['cpac_type']) )
1417
  *
1418
  * @since 1.0
1419
  */
1420
+ private function get_singular_name( $type )
1421
  {
1422
+ // Users
1423
+ if ( $type == 'wp-users' )
1424
+ $label = 'Users';
1425
+
1426
+ // Posts
1427
+ else {
1428
+ $posttype_obj = get_post_type_object($type);
1429
+ $label = $posttype_obj->labels->singular_name;
1430
+ }
1431
+
1432
  return $label;
1433
  }
1434
 
1439
  */
1440
  public function handle_requests_orderby_column( $vars )
1441
  {
1442
+ if ( isset( $vars['orderby'] ) ) {
1443
+ $column = $this->get_orderby_type( $vars['orderby'], $vars['post_type'] );
 
1444
 
1445
+ if ( $column ) {
1446
+ $id = key($column);
 
 
 
1447
 
1448
+ // Page Order
1449
+ if ( $id == 'column-order' ) {
1450
  $vars['orderby'] = 'menu_order';
1451
  }
1452
+
1453
+ // Custom Fields
1454
+ if ( $this->is_column_meta($id) ) {
1455
+ $field = $column[$id]['field'];
1456
+
1457
+ // orderby type
1458
+ $field_type = 'meta_value';
1459
+ if ( $column[$id]['field_type'] == 'numeric' || $column[$id]['field_type'] == 'library_id' )
1460
+ $field_type = 'meta_value_num';
1461
+
1462
+ // set vars
1463
+ $vars = array_merge( $vars, array(
1464
+ 'meta_key' => $field,
1465
+ 'orderby' => $field_type
1466
+ ) );
1467
+ }
1468
  }
1469
  }
1470
  return $vars;
1471
  }
1472
 
1473
+ /**
1474
+ * Get orderby type
1475
+ *
1476
+ * @since 1.1
1477
+ */
1478
+ private function get_orderby_type($orderby, $post_type)
1479
+ {
1480
+ $db_columns = $this->get_stored_columns($post_type);
1481
+
1482
+ if ( $db_columns ) {
1483
+ foreach ( $db_columns as $id => $vars ) {
1484
+
1485
+ // check which custom column was clicked
1486
+ if ( isset( $vars['label'] ) && $orderby == $this->sanitize_string( $vars['label'] ) ) {
1487
+ $column[$id] = $vars;
1488
+ return $column;
1489
+ }
1490
+ }
1491
+ }
1492
+ return false;
1493
+ }
1494
+
1495
  /**
1496
  * Sanitize label
1497
  *
1506
  }
1507
 
1508
  /**
1509
+ * Get plugin url.
1510
  *
1511
  * @since 1.0
1512
  */
1515
  return plugins_url($file, __FILE__);
1516
  }
1517
 
1518
+ /**
1519
+ * Checks if column-meta key exists
1520
+ *
1521
+ * @since 1.0
1522
+ */
1523
+ private function is_column_meta( $id = '' )
1524
+ {
1525
+ if ( strpos($id, 'column-meta-') !== false )
1526
+ return true;
1527
+
1528
+ return false;
1529
+ }
1530
+
1531
  /**
1532
  * Get a thumbnail
1533
  *
1545
  $image = str_replace( WP_CONTENT_DIR, WP_CONTENT_URL, $new);
1546
 
1547
  return "<img src='{$image}' alt='' width='120' height='80' />";
1548
+ }
1549
+
1550
+ /**
1551
+ * Settings Page Template.
1552
+ *
1553
+ * This function in conjunction with others usei the WordPress
1554
+ * Settings API to create a settings page where users can adjust
1555
+ * the behaviour of this plugin.
1556
+ *
1557
+ * @since 1.0
1558
+ */
1559
+ public function plugin_settings_page()
1560
+ {
1561
+ // loop through post types
1562
+ $rows = '';
1563
+ foreach ( $this->get_types() as $type ) {
1564
+
1565
+ // post type label
1566
+ $label = $this->get_singular_name($type);
1567
+
1568
+ // id
1569
+ $id = $this->sanitize_string($type);
1570
+
1571
+ // build draggable boxes
1572
+ $boxes = $this->get_column_boxes($type);
1573
+
1574
+ // class
1575
+ $class = $this->is_menu_type_current($type) ? ' current' : ' hidden';
1576
+
1577
+ $rows .= "
1578
+ <tr id='cpac-box-{$id}' valign='top' class='cpac-box-row{$class}'>
1579
+ <th class='cpac_post_type' scope='row'>
1580
+ {$label}
1581
+ </th>
1582
+ <td>
1583
+ <h3 class='cpac_post_type hidden'>{$label}</h3>
1584
+ {$boxes}
1585
+ </td>
1586
+ </tr>
1587
+ ";
1588
+ }
1589
+
1590
+ // Post Type Menu
1591
+ $menu = $this->get_menu();
1592
+
1593
+ ?>
1594
+ <div id="cpac" class="wrap">
1595
+ <?php screen_icon($this->slug) ?>
1596
+ <h2><?php _e('Codepress Admin Columns', $this->textdomain); ?></h2>
1597
+ <?php echo $menu ?>
1598
+ <div class="postbox-container" style="width:70%;">
1599
+ <div class="metabox-holder">
1600
+ <div class="meta-box-sortables">
1601
+
1602
+ <div id="general-cpac-settings" class="postbox">
1603
+ <div title="Click to toggle" class="handlediv"><br></div>
1604
+ <h3 class="hndle">
1605
+ <span><?php _e('Admin Columns', $this->textdomain ); ?></span>
1606
+ </h3>
1607
+ <div class="inside">
1608
+ <form method="post" action="options.php">
1609
+
1610
+ <?php settings_fields( 'cpac-settings-group' ); ?>
1611
+
1612
+ <table class="form-table">
1613
+
1614
+ <?php echo $rows ?>
1615
+
1616
+ <tr class="bottom" valign="top">
1617
+ <th scope="row"></th>
1618
+ <td>
1619
+ <p class="submit">
1620
+ <input type="submit" class="button-primary" value="<?php _e('Save Changes') ?>" />
1621
+ </p>
1622
+ </td>
1623
+ </tr>
1624
+ </table>
1625
+ </form>
1626
+ </div>
1627
+ </div><!-- general-settings -->
1628
+
1629
+ <div id="restore-cpac-settings" class="postbox">
1630
+ <div title="Click to toggle" class="handlediv"><br></div>
1631
+ <h3 class="hndle">
1632
+ <span><?php _e('Restore defaults', $this->textdomain) ?></span>
1633
+ </h3>
1634
+ <div class="inside">
1635
+ <form method="post" action="">
1636
+ <input type="submit" class="button" name="cpac-restore-defaults" value="<?php _e('Restore default settings', $this->textdomain ) ?>" onclick="return confirm('<?php _e("Warning! ALL saved admin columns data will be deleted. This cannot be undone. \'OK\' to delete, \'Cancel\' to stop", $this->textdomain); ?>');" />
1637
+ </form>
1638
+ <p class="description"><?php _e('This will delete all column settings and restore the default settings.', $this->textdomain); ?></p>
1639
+ </div>
1640
+ </div><!-- restore-cpac-settings -->
1641
+
1642
+ </div>
1643
+ </div>
1644
+ </div><!-- .postbox-container -->
1645
+
1646
+ <div class="postbox-container" style="width:20%;">
1647
+ <div class="metabox-holder">
1648
+ <div class="meta-box-sortables">
1649
+
1650
+ <div id="side-cpac-settings" class="postbox">
1651
+ <div title="Click to toggle" class="handlediv"><br></div>
1652
+ <h3 class="hndle">
1653
+ <span><?php _e('Need support?', $this->textdomain) ?></span>
1654
+ </h3>
1655
+ <div class="inside">
1656
+ <p><?php printf(__('If you are having problems with this plugin, please talk about them in the <a href="%s">Support forums</a> or send me an email %s.', $this->textdomain), 'http://wordpress.org/tags/codepress-admin-columns', '<a href="mailto:info@codepress.nl">info@codepress.nl</a>' );?></p>
1657
+ <p><?php printf(__("If you're sure you've found a bug, or have a feature request, please <a href='%s'>submit your feedback</a>.", $this->textdomain), 'http://www.codepress.nl/plugins/codepress-admin-columns#feedback');?></p>
1658
+ </div>
1659
+ </div><!-- side-cpac-settings -->
1660
+
1661
+ </div>
1662
+ </div>
1663
+ </div><!-- .postbox-container -->
1664
+
1665
+ </div>
1666
+ <?php
1667
+ }
1668
  }
1669
  ?>
languages/codepress-admin-columns-nl_NL.mo CHANGED
Binary file
languages/codepress-admin-columns-nl_NL.po CHANGED
@@ -3,8 +3,8 @@ msgstr ""
3
  "Project-Id-Version: Codepress Admin Columns\n"
4
  "Report-Msgid-Bugs-To: \n"
5
  "POT-Creation-Date: 2011-11-26 23:47+0100\n"
6
- "PO-Revision-Date: 2011-11-26 23:47+0100\n"
7
- "Last-Translator: Tobias <tschutter@gmail.com>\n"
8
  "Language-Team: Codepress <info@codepress.nl>\n"
9
  "MIME-Version: 1.0\n"
10
  "Content-Type: text/plain; charset=UTF-8\n"
@@ -159,150 +159,3 @@ msgstr ""
159
  msgid "Field"
160
  msgstr "Veld"
161
 
162
- #~ msgid "Title"
163
- #~ msgstr "Titel"
164
-
165
- #~ msgid "Description"
166
- #~ msgstr "Beschrijving"
167
-
168
- #~ msgid "Latitude"
169
- #~ msgstr "Breedtegraad"
170
-
171
- #~ msgid "Longitude"
172
- #~ msgstr "Lengtegraad"
173
-
174
- #~ msgid "Width"
175
- #~ msgstr "Breedte"
176
-
177
- #~ msgid "Height"
178
- #~ msgstr "Hoogte"
179
-
180
- #~ msgid "Dynamic"
181
- #~ msgstr "Dynamisch"
182
-
183
- #~ msgid "Geocoder - Pronamic Google Maps"
184
- #~ msgstr "Geocoder - Pronamic Google Maps"
185
-
186
- #~ msgid "Number posts to geocode: %s"
187
- #~ msgstr "Aantel berichten te geocoderen: %s"
188
-
189
- #~ msgid "ID"
190
- #~ msgstr "ID"
191
-
192
- #~ msgid "Address"
193
- #~ msgstr "Adres"
194
-
195
- #~ msgid "Status"
196
- #~ msgstr "Status"
197
-
198
- #~ msgid "Location"
199
- #~ msgstr "Locatie"
200
-
201
- #~ msgid "Geocode"
202
- #~ msgstr "Geocodeer"
203
-
204
- #~ msgid "Zero results"
205
- #~ msgstr "Geen resultaten"
206
-
207
- #~ msgid ""
208
- #~ "We found no geocoding results for the following %s posts, adjust them "
209
- #~ "manually if needed."
210
- #~ msgstr ""
211
- #~ "We konden geen gecode resultaten vinden voor de volgende%s berichten, pas "
212
- #~ "deze handmatig aan wanneer nodig."
213
-
214
- #~ msgid "Configuration - Pronamic Google Maps"
215
- #~ msgstr "Configuratie - Pronamic Google Maps"
216
-
217
- #~ msgid "Active"
218
- #~ msgstr "Actief"
219
-
220
- #~ msgid "Activate Google Maps"
221
- #~ msgstr "Activeer Google Maps"
222
-
223
- #~ msgid "Show Google Maps"
224
- #~ msgstr "Google Maps weergeven"
225
-
226
- #~ msgid "Geocoder"
227
- #~ msgstr "Geocoder"
228
-
229
- #~ msgid "Geocode &darr;"
230
- #~ msgstr "Geocoderen &darr;"
231
-
232
- #~ msgid "Reverse Geocode &uarr;"
233
- #~ msgstr "Omgekeerd geocoderen &uarr;"
234
-
235
- #~ msgid "Tip: Change the zoom level and map type to your own wishes."
236
- #~ msgstr "Tip: wijzig het zoomniveau en map type naar je eigen wens."
237
-
238
- #~ msgid "Delete plugin"
239
- #~ msgstr "Verwijder plugin"
240
-
241
- #~ msgid "Warning! This will delete all Pronamic Google Maps data and options."
242
- #~ msgstr ""
243
- #~ "Waarschuwing! Dit zal alle Pronamic Google Maps data en opties "
244
- #~ "verwijderen."
245
-
246
- #~ msgid "Uninstall"
247
- #~ msgstr "Verwijderen"
248
-
249
- #~ msgid "Google Maps"
250
- #~ msgstr "Google Maps"
251
-
252
- #~ msgid "General"
253
- #~ msgstr "Algemeen"
254
-
255
- #~ msgid "Use this widget to add an Google Maps as a widget."
256
- #~ msgstr "Gebruik deze widget om Google Maps toe te voegen."
257
-
258
- #~ msgid "pixels"
259
- #~ msgstr "pixels"
260
-
261
- #~ msgid "percent"
262
- #~ msgstr "procent"
263
-
264
- #~ msgid "Search"
265
- #~ msgstr "Zoeken"
266
-
267
- #~ msgid "Click to toggle"
268
- #~ msgstr "Klik om te wisselen"
269
-
270
- #~ msgid "Donate $10, $20 or $50!"
271
- #~ msgstr "Doneer $10, $20 of $50!"
272
-
273
- #~ msgid ""
274
- #~ "This plugin has cost us countless hours of work, if you use it, please "
275
- #~ "donate a token of your appreciation!"
276
- #~ msgstr ""
277
- #~ "Het ons veel uren werken gekost om deze plugin te ontwikkelen, als je het "
278
- #~ "gebruikt, doneer a.u.b. voor je waardering!"
279
-
280
- #~ msgid "Latest news from Pronamic"
281
- #~ msgstr "Laatste nieuws van Pronamic"
282
-
283
- #~ msgid "no news items, feed might be broken..."
284
- #~ msgstr "geen nieuws items, feed is waarschijnlijk niet bereikbaar..."
285
-
286
- #~ msgid "Subscribe with RSS"
287
- #~ msgstr "Aanmelden voor RSS"
288
-
289
- #~ msgid "Subscribe by e-mail"
290
- #~ msgstr "Aanmelden via e-mail"
291
-
292
- #~ msgid "Why not do any or all of the following:"
293
- #~ msgstr "Waarom doe je niet één van de volgende dingen:"
294
-
295
- #~ msgid "Link to it so other folks can find out about it."
296
- #~ msgstr "Link naar ons zodat anderen deze plugin ook ontdekken."
297
-
298
- #~ msgid "Give it a good rating on WordPress.org."
299
- #~ msgstr "Geef het een goede score op WordPress.org."
300
-
301
- #~ msgid "Let other people know that it works with your WordPress setup."
302
- #~ msgstr "Laat anderen weten dat het werk op je WordPress installatie."
303
-
304
- #~ msgid "Found a bug?"
305
- #~ msgstr "Bug gevonden?"
306
-
307
- #~ msgid "Configuration"
308
- #~ msgstr "Configuratie"
3
  "Project-Id-Version: Codepress Admin Columns\n"
4
  "Report-Msgid-Bugs-To: \n"
5
  "POT-Creation-Date: 2011-11-26 23:47+0100\n"
6
+ "PO-Revision-Date: 2012-04-20 21:11+0100\n"
7
+ "Last-Translator: Codepress <info@codepress.nl>\n"
8
  "Language-Team: Codepress <info@codepress.nl>\n"
9
  "MIME-Version: 1.0\n"
10
  "Content-Type: text/plain; charset=UTF-8\n"
159
  msgid "Field"
160
  msgstr "Veld"
161
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Â