Adding custom fields to WordPress_PostController
-
I’ve exhausted all of my searching efforts, so I’m hoping I can get some help. I am trying to add custom fields for multiple staff members using foreach and variables. I am using HarriBellThomas’s WordPress_PostController to create and manage the posts. Here is the code and modified class I’m working on:
This is part of a function that is run on page load.
foreach ($response->records as $record) { $title = $record->Title; $firstname = $record->FirstName; $lastname = $record->LastName; require_once plugin_dir_path( __FILE__ ) . '../includes/class.postcontroller.php'; $Poster = new PostController; $Poster->set_title($firstname); $Poster->set_type( "staff" ); $Poster->set_content($title); $Poster->set_author_id( 1 ); $Poster->set_post_slug( 'updated_post' ); $Poster->set_post_state( "publish" ); $Poster->set_meta_data('first-name', $firstname); $Poster->search('title', 'Old Post'); $Poster->update(); $Poster->create(); //$Poster->PrettyPrintAll(); $Poster->get_var('slug');Here is the full modified class.postcontroller.php file:
<?php /** * Wrapper Class to create/manage/update WordPress posts and pages. * * @author Harri Bell-Thomas <[email protected]> * @created January, 2014 * @version 1.0.0 * @license Attribution-ShareAlike 3.0 Unported (CC BY-SA 3.0) * @license url : http://creativecommons.org/licenses/by-sa/3.0/ */ if (!isset($wp_rewrite)) $wp_rewrite = new WP_Rewrite(); class PostController { // Variables for Post Data public $PC_title; public $PC_type; public $PC_content; public $PC_category; public $PC_template; public $PC_slug; public $PC_auth_id; public $PC_status = "publish"; // Variables for Meta Data public $PC_meta_key; public $PC_meta_value; // Variables for Post Updating public $PC_current_post; public $PC_current_post_id; public $PC_current_post_permalink; // Error Array public $PC_errors; // Creation functions public function create() { if(isset($this->PC_title) ) { if ($this->PC_type == 'page') $post = get_page_by_title( $this->PC_title, 'OBJECT', $this->PC_type ); else $post = get_page_by_title( $this->PC_title, 'OBJECT', $this->PC_type ); $post_data = array( 'post_title' => wp_strip_all_tags($this->PC_title), 'post_name' => $this->PC_slug, 'post_content' => $this->PC_content, 'post_status' => $this->PC_status, 'post_type' => $this->PC_type, 'post_author' => $this->PC_auth_id, 'post_category' => $this->PC_category, 'page_template' => $this->PC_template ); $meta_data = array( 'meta_key' => $this->PC_meta_key, 'meta-value' => $this->PC_meta_value ); if(!isset($post)){ $this->PC_current_post_id = wp_insert_post( $post_data, $error_obj ); $this->PC_current_post = get_post((integer)$this->PC_current_post_id, 'OBJECT'); update_post_meta((integer)$this->PC_current_post_id, $PC_meta_key, $PC_meta_value); $this->PC_current_post_permalink = get_permalink((integer)$this->PC_current_post_id); return $error_obj; } else { $this->update(); $this->errors[] = 'That page already exists. Try updating instead. Control passed to the update() function.'; return FALSE; } } else { $this->errors[] = 'Title has not been set.'; return FALSE; } } // SET POST'S TITLE public function set_title($name){ $this->PC_title = $name; return $this->PC_title; } // SET POST'S TYPE public function set_type($type){ $this->PC_type = $type; return $this->PC_type; } // SET POST'S CONTENT public function set_content($content){ $this->PC_content = $content; return $this->PC_content; } // SET CUSTOM FIELDS public function set_meta_data($meta_key, $meta_value){ $this->PC_meta_key = $meta_key; $this->PC_meta_value = $meta_value; return $this->PC_meta_key; return $this->PC_meta_value; } // SET POST'S AUTHOR ID public function set_author_id($auth_id){ $this->PC_auth_id = $auth_id; return $this->PC_auth_id; } // SET POST'S STATE public function set_post_state($content){ $this->PC_status = $content; return $this->PC_status; } // SET POST SLUG public function set_post_slug($slug){ $args = array('name' => $slug); $posts_query = get_posts( $args ); if( !get_posts( $args ) && !get_page_by_path( $this->PC_slug ) ) { $this->PC_slug = $slug; return $this->PC_slug; } else { $this->errors[] = 'Slug already in use.'; return FALSE; } } // SET PAGE TEMPLATE public function set_page_template($content){ if ($this->PC_type == "page") { $this->PC_template = $content; return $this->PC_template; } else { $this->errors[] = 'You can only use template for pages.'; return FALSE; } } // ADD CATEGORY IDs TO THE CATEGORIES ARRAY public function add_category($IDs){ if(is_array($IDs)) { foreach ($IDs as $id) { if (is_int($id)) { $this->PC_category[] = $id; } else { $this->errors[] = '<b>' .$id . '</b> is not a valid integer input.'; return FALSE; } } } else { $this->errors[] = 'Input specified in not a valid array.'; return FALSE; } } // Search for Post function public function search($by, $data){ switch ($by) { case 'id' : if(is_integer($data) && get_post((integer)$data) !== NULL) { $this->PC_current_post = get_post((integer)$data, 'OBJECT'); $this->PC_current_post_id = (integer)$data; $this->PC_current_post_permalink = get_permalink((integer)$data); return TRUE; } else { $this->errors[] = 'No post found with that ID.'; return FALSE; } break; case 'title' : $post = get_page_by_title($data); $id = $post->ID; if(is_integer($id) && get_post((integer)$id) !== NULL) { $this->PC_current_post = get_post((integer)$id, 'OBJECT'); $this->PC_current_post_id = (integer)$id; $this->PC_current_post_permalink = get_permalink((integer)$id); return TRUE; } else { $this->errors[] = 'No post found with that title.'; return FALSE; } break; case 'slug' : $args = array('name' => $data, 'max_num_posts' => 1); $posts_query = get_posts( $args ); if( $posts_query ) $id = $posts_query[0]->ID; else $this->errors[] = 'No post found with that slug.'; if(is_integer($id) && get_post((integer)$id) !== NULL) { $this->PC_current_post = get_post((integer)$id, 'OBJECT'); $this->PC_current_post_id = (integer)$id; $this->PC_current_post_permalink = get_permalink((integer)$id); return TRUE; } else { $this->errors[] = 'No post found with that slug.'; return FALSE; } break; default: $this->errors[] = 'No post found.'; return FALSE; break; } } // Update Post public function update(){ if (isset($this->PC_current_post_id)) { // Declare ID of Post to be updated $PC_post['ID'] = $this->PC_current_post_id; // Declare ID of Post to be updated if (isset($this->PC_title) && $this->PC_title !== $this->PC_current_post->post_title) $PC_post['post_title'] = $this->PC_title; if (isset($this->PC_type) && $this->PC_type !== $this->PC_current_post->post_type) $PC_post['post_type'] = $this->PC_type; if (isset($this->PC_auth_id) && $this->PC_auth_id !== $this->PC_current_post->post_type) $PC_post['post_author'] = $this->PC_auth_id; if (isset($this->PC_status) && $this->PC_status !== $this->PC_current_post->post_status) $PC_post['post_status'] = $this->PC_status; if (isset($this->PC_category) && $this->PC_category !== $this->PC_current_post->post_category) $PC_post['post_category'] = $this->PC_category; if (isset($this->PC_template) && $this->PC_template !== $this->PC_current_post->page_template && ($PC_post['post_type'] == 'page' || $this->PC_current_post->post_type == 'page')) $PC_post['page_template'] = $this->PC_template; if (isset($this->PC_slug) && $this->PC_slug !== $this->PC_current_post->post_name) { $args = array('name' => $this->PC_slug); if( !get_posts( $args ) && !get_page_by_path( $this->PC_slug ) ) $PC_post['post_name'] = $this->PC_slug; else $errors[] = 'Slug Defined is Not Unique'; } if (isset($this->PC_content) && $this->PC_content !== $this->PC_status->post_content ) $PC_post['post_content'] = $this->PC_content; wp_update_post( $PC_post ); } return($errors); } // General functions public function get_content(){ if (isset($this->PC_status->post_content ) ) return $this->PC_status->post_content; } public function get_var($name){ $name = 'PC_'.$name; if (isset($this->$name)) return $this->$name; } public function unset_all(){ foreach (get_class_vars(get_class($this)) as $name => $default) $this->$name = $default; } public function __toString() { return 'Use the PrettyPrint function to return the contents of this Object. E.g; <pre>$my_post->PrettyPrintAll();</pre> '; } public function PrettyPrint($data){ echo " <pre>"; print_r($data); echo "</pre> "; } public function PrettyPrintAll(){ echo " <pre>"; print_r($this); echo "</pre> "; } } ?>And the pieces of code that I’ve added or modified to update the custom fields:
$Poster->set_meta_data('first-name', $firstname);// Variables for Meta Data public $PC_meta_key; public $PC_meta_value;// SET CUSTOM FIELDS public function set_meta_data($meta_key, $meta_value){ $this->PC_meta_key = $meta_key; $this->PC_meta_value = $meta_value; return $this->PC_meta_key; return $this->PC_meta_value; }if(!isset($post)){ $this->PC_current_post_id = wp_insert_post( $post_data, $error_obj ); $this->PC_current_post = get_post((integer)$this->PC_current_post_id, 'OBJECT'); <em>update_post_meta((integer)$this->PC_current_post_id, $PC_meta_key, $PC_meta_value);</em> $this->PC_current_post_permalink = get_permalink((integer)$this->PC_current_post_id); return $error_obj; }I’d appreciate any help I can get. I think my main issue is not adding the right post id’s to update_post_meta. Also, I’m not sure if I am passing the variables properly to the update_post_meta function. Thank you very much in advance.
The topic ‘Adding custom fields to WordPress_PostController’ is closed to new replies.