Advertisement
Guest User

Untitled

a guest
Oct 19th, 2019
118
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.56 KB | None | 0 0
  1. <?php
  2. /**
  3. * Plugin Name: Convert ACF PHP to JSON
  4. * Description: Convert Advanced Custom Fields Pro configuration from PHP to JSON.
  5. */
  6.  
  7. namespace ConvertAcfPhpToJson;
  8.  
  9. /**
  10. * Add submenu item under 'Custom Fields'
  11. */
  12. function admin_menu() {
  13. add_submenu_page('edit.php?post_type=acf-field-group', 'Convert PHP fields to JSON', 'PHP to JSON', 'manage_options', 'acf-php-to-json', __NAMESPACE__ . '\\admin_page');
  14. }
  15. add_action('admin_menu', __NAMESPACE__ . '\\admin_menu', 20);
  16.  
  17. /**
  18. * Output the admin page
  19. */
  20. function admin_page() {
  21. ?>
  22. <div class="wrap">
  23. <h1>Convert PHP fields to JSON</h1>
  24. <?php
  25.  
  26. if (!isset($_GET['continue']) || $_GET['continue'] !== 'true') {
  27. admin_page_intro();
  28. }
  29. else {
  30. admin_page_convert();
  31. }
  32. ?>
  33. </div>
  34. <?php
  35. }
  36.  
  37. /**
  38. * Output the introductory page
  39. */
  40. function admin_page_intro() {
  41. $groups = get_groups_to_convert();
  42.  
  43. if (empty($groups)) {
  44. echo '<p>No PHP field group configuration found. Nothing to convert.</p>';
  45. return;
  46. }
  47. else {
  48. echo sprintf('<p>%d field groups will be converted from PHP to JSON configuration.</p>', count($groups));
  49. echo '<a href="edit.php?post_type=acf-field-group&page=acf-php-to-json&continue=true" class="button button-primary">Convert Field Groups</a>';
  50. }
  51. }
  52.  
  53. /**
  54. * Convert the field groups and output the conversion page
  55. */
  56. function admin_page_convert() {
  57. $groups = get_groups_to_convert();
  58.  
  59. echo sprintf('<p>Converting %d field groups from PHP to JSON configuration...</p>', count($groups));
  60.  
  61. echo '<ol>';
  62. foreach ($groups as $group) {
  63. if (convert_group($group)) {
  64. echo sprintf('<li>Converted: <strong>%s</strong> (%s)</li>', $group['title'], $group['key']);
  65. }
  66. else {
  67. echo sprintf('<li><strong>Failed to convert: %s</strong> (%s)</li>', $group['title'], $group['key']);
  68. }
  69. }
  70. echo '</ol>';
  71.  
  72. echo '<p>Done. Now remove the PHP field group configuration.</p>';
  73. }
  74.  
  75. /**
  76. * Get the PHP field groups which will be converted.
  77. *
  78. * @return array
  79. */
  80. function get_groups_to_convert() {
  81. $groups = acf_get_local_field_groups();
  82. if (!$groups) return [];
  83. return array_filter($groups, function($group) {
  84. return $group['local'] == 'php';
  85. });
  86. }
  87.  
  88. /**
  89. * Convert a field group to JSON
  90. *
  91. * @param array $group
  92. * @return bool
  93. */
  94. function convert_group($group) {
  95. //$group['fields'] = acf_get_local_fields($group['key']);
  96. $group['fields'] = acf_get_fields($group['key']);
  97. return acf_write_json_field_group($group);
  98. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement