Jake Vanderwerf
2026-02-04 2127b1bdd73ecd2423e443992da4b442f5a3c1a3
inc/helpers/crud.php
@@ -4,6 +4,58 @@
   exit;
}
use JVBase\managers\Cache;
use JVBase\meta\Form;
/**
 * For whatever reason, after much testing, it seems that
 *  good ol' WP resets post_parent if you call wp_update_post
 *  without explicitly setting the post_parent
 * This is a wrapper that grabs old data and merges it with
 *   what we're trying to update - reducing repetition
 * @param array $postArr as in wp_update_post
 * @param array $allowOverride an array of keys that are allowed to be overridden
 * @return int|WP_Error
 */
function jvb_update_post(array $postArr, array $allowOverride = []) {
   if (empty($postArr['ID'])) {
      return new WP_Error('missing_id', 'Post ID is required');
   }
   $old = get_post($postArr['ID'], ARRAY_A);
   if (!$old) {
      return new WP_Error('invalid_id', 'Post not found');
   }
   /**
    * WARNING: You won't want to override fields like:
    * guid
    * filter
    * ancestors
    * post_category
    * tags_input
    * to_ping
    * pinged
   **/
   $preserveFields = [
      'post_parent', 'menu_order',
      'post_status', 'post_password', 'comment_status', 'ping_status',
      'post_date', 'post_date_gmt', 'post_modified', 'post_modified_gmt',
      'post_name', 'post_title', 'post_excerpt', 'post_content',
      'post_author'
   ];
   // Remove fields we explicitly want to override
   $preserveFields = array_diff($preserveFields, $allowOverride);
   // Keep only preserved fields from old post
   $old = array_intersect_key($old, array_flip($preserveFields));
   // Merge old → new (new wins)
   $merged = array_merge($old, $postArr);
   $merged['ID'] = (int)$postArr['ID'];
   return wp_update_post($merged, true);
}
/**
 * Outputs the blocks of a CRUD management in backend
 * Mainly used in news.php so far
@@ -166,7 +218,7 @@
 */
function jvbRenderDateFilter(string $content):string
{
    $cache = new JVBase\Managers\CacheManager('date_filter');
    $cache = Cache::for('date_filter')->connect('post', true);
    $check = $cache->get($content);
    if ($check) {
        return $check;
@@ -295,8 +347,6 @@
    echo $nav;
    $fields = jvbGetFields($postType);
    $meta = new JVBase\meta\MetaManager($ID, $contentType);
    ?>
    <form class="jvb-form" id="bio" data-form-id="bio-<?=$ID?>" data-save="bio"
          data-object-id="<?=$ID?>" data-content-type="<?=$postType?>">
@@ -332,10 +382,10 @@
                        if (array_key_exists('role', $config)) {
                            $user = get_userdata($ID);
                            if (in_array($config['role'], $user->roles)) {
                                $meta->render('form', $field, $config);
                                echo Form::render($field, null, $config);
                            }
                        } else {
                            $meta->render('form', $field, $config);
                            echo Form::render($field, null, $config);
                        }
                    }
                    ?>