\"$msg\"\n" . print_r($data, true) . ""; } function onelevel_array(array $array) { $return = []; array_walk_recursive($array, function ($a) use (&$return) { $return[] = $a; }); return $return; } function get_sp_event_data(SP_Event $sp_event) { $data = [ "results" => $sp_event->results(), "main_results" => $sp_event->main_results(), "outcome" => $sp_event->outcome(), "status" => $sp_event->status(), "format" => $sp_event->format(), "status" => get_post_meta($sp_event->ID, "sp_status", false), "venue" => get_the_terms($sp_event->ID, "sp_venue", true), "date" => $sp_event->post->post_date, "teams" => get_post_meta($sp_event->ID, "sp_team", false), ]; return $data; } public function __construct() { add_action("post_updated", [$this, "datachangecheck"], 10, 3); } /* * datachangecheck * * This function is called upon hook post_updated. * The function checks if data for updated post has been changed, * and saves a file when data has been changed * * @param string $post_id id of post affected * @param WP_Post $post_after WP_Post after post has been updated * @param WP_Post $post_before WP_Post before post has been updated * @return N/A * */ function datachangecheck($post_id, $post_after, $post_before) { $this->post_before = $post_before; $this->post_after = $post_after; //Cast postobjects into arrays, so comparision is possible with builtin-php functions $spf = (array) $post_before; $spa = (array) $post_after; //These would differ every update. so remove them for possible comparision unset($spf["post_modified"]); unset($spf["post_modified_gmt"]); unset($spa["post_modified"]); unset($spa["post_modified_gmt"]); //Check if any difference between arrays (if empty no difference) //If not empty, save file that tells plugin that data has been changed $ard = array_diff($spf, $spa); if (!empty($ard)) { $this->datahaschanged_save($post_before, $post_after); print_r_pre($this->sp_event_data_before); } else { //No change of post native data, check if any metapost data has been changed //Remove edit_last and edit_lock because they could differ without data being changed $this->metadata_before = get_post_meta($post_id); $this->sp_event_before = new SP_Event($post_before); $this->sp_event_data_before = $this->get_sp_event_data( $this->sp_event_before ); unset($this->metadata_before["_edit_last"]); unset($this->metadata_before["_edit_lock"]); add_action( "updated_post_meta", [$this, "checkmetadata_after"], 10, 2 ); } return; } /* * checkmetadata_after * * This function is called upon hook updated_post_meta when data has been update, but no change in native post data * has been made and saves a file when data has been changed * * @param string $post_id id of post affected * @param WP_Post $post_after WP_Post after post has been updated * @param WP_Post $post_before WP_Post before post has been updated * @return N/A * */ function checkmetadata_after($meta_id, $post_id) { //Because updated_post_meta is used, now we can grab the actual updated values //Remove edit_last and edit_lock because they could differ without data being changed $this->metadata_after = get_post_meta($post_id); $this->sp_event_after = new SP_Event($this->post_after); $this->sp_event_data_after = $this->get_sp_event_data( $this->sp_event_after ); unset($this->metadata_after["_edit_last"]); unset($this->metadata_after["_edit_lock"]); //Make one-level index arrays of metadata //so array_diff works correctly down below $arr_mdb = $this->onelevel_array($this->metadata_before); $arr_mda = $this->onelevel_array($this->metadata_after); //Compare array with metapost values before and after //If not empty, save file that tells plugin that data has been changed $ard_metadata = array_diff($arr_mdb, $arr_mda); if (!empty($ard_metadata)) { $this->datahaschanged_save( $this->metadata_before, $this->metadata_after, true ); $this->metadata_before = []; $this->metadata_after = []; $this->post_before = []; $this->post_after = []; } return; } // echo get_the_post_thumbnail_url( get_the_ID(), 'medium' ); function datahaschanged_save( $before = null, $after = null, $metadata_haschange = false ) { _log("metadata has changed"); // $this->print_r_pre($this->sp_event_data_before); // $this->print_r_pre($this->sp_event_data_after['results']); // _log($this->sp_event_data_before->main_results); if ( $this->sp_event_data_before["main_results"] != $this->sp_event_data_after["main_results"] ) { _log("Score has changed!"); _log($this->sp_event_data_after["results"]); $message = []; foreach ( $this->sp_event_data_after["outcome"] as $team_id => $outcome ) { // print_r_pre($outcome); $team = get_post($team_id); $runs = $this->sp_event_data_after["results"][$team_id]["r"]; // print_r_pre($team); $message[] = "$team->post_title: $runs ($outcome)"; } _log(join(", ", $message)); } } } $_ = new NewClass(); // get_the_terms($sp_event->ID, 'sp_venue', true) // array(1) // 0: // WP_Term // term_id: // 5 // name: // "Southwest Park" // slug: // "southwest" // term_group: // 0 // term_taxonomy_id: // 5 // taxonomy: // "sp_venue" // description: // "Southwest Park spans 6.9 acres and was incorporated into the Park Ridge Park District in 1956. This public space offers various amenities, including a playground, ball fields, a football field, a basketball court, as well as practical features like drinking fountains and a bike rack. The park serves as a recreational hub for the community, accommodating diverse interests and activities." // parent: // 0 // count: // 32 // filter: function test_inline() { $id = sp_array_value($_POST, "post_id"); $wp_post = get_post($id); if ("sp_event" == $wp_post->post_type) { $old_post = new SP_Event($id); $old_results = $old_post->main_results(); $new_results = sp_array_value($_POST, "results"); echo "hello"; } } add_action("wp_ajax_sp-save-inline-results", "test_inline"); ?>