"Plugin Duplicate Posts", "description" => _x("Logs posts and pages cloned using plugin Duplicate Post", "Logger: Plugin Duplicate Post", "simple-history"), "name_via" => _x("Using plugin Duplicate Posts", "Logger: Plugin Duplicate Post", "simple-history"), "capability" => "manage_options", "messages" => array( 'post_duplicated' => _x('Cloned "{duplicated_post_title}" to a new post', "Logger: Plugin Duplicate Post", 'simple-history') ), ); return $arr_info; } public function loaded() { require_once(ABSPATH . 'wp-admin/includes/plugin.php'); $pluginFilePath = 'duplicate-post/duplicate-post.php'; $isPluginActive = is_plugin_active('duplicate-post/duplicate-post.php'); if (!$isPluginActive) { return; } // When a copy have been made of a post or page // the action 'dp_duplicate_page' or 'dp_duplicate_post' // is fired with args $new_post_id, $post, $status. // We add actions with prio 20 so we probably run after // the plugins own add_action('dp_duplicate_post', array($this, 'onDpDuplicatePost'), 100, 3); add_action('dp_duplicate_page', array($this, 'onDpDuplicatePost'), 100, 3); } /** * A post or page was duplicated * * @param $new_post_id * @param $post old post that a copy was made of * @param $status */ public function onDpDuplicatePost($newPostID, $post, $status) { $new_post = get_post($newPostID); $context = array( "new_post_title" => $new_post->post_title, "new_post_id" => $new_post->ID, "duplicated_post_title" => $post->post_title, "duplicated_post_id" => $post->ID, // "duplicate_new_post_id" => $newPostID, // "status" => $status ); $this->infoMessage( "post_duplicated", $context ); } /** * Modify plain output to include link to post */ public function getLogRowPlainTextOutput($row) { $context = $row->context; $new_post_id = isset($context["new_post_id"]) ? $context["new_post_id"] : null; $duplicated_post_id = isset($context["duplicated_post_id"]) ? $context["duplicated_post_id"] : null; $duplicated_post_title = isset($context["duplicated_post_title"]) ? $context["duplicated_post_title"] : null; $message_key = isset($context["_message_key"]) ? $context["_message_key"] : null; $message = $row->message; // Check if post still is available // It will return a WP_Post Object if post still is in system // If post is deleted from trash (not just moved there), then null is returned $postDuplicated = get_post($duplicated_post_id); $post_is_available = is_a($postDuplicated, "WP_Post"); // Try to get singular name $post_type = isset($postDuplicated->post_type) ? $postDuplicated->post_type : ""; $post_type_obj = get_post_type_object($post_type); if (!is_null($post_type_obj)) { if (!empty ($post_type_obj->labels->singular_name) ) { $context["duplicated_post_post_type_singular_name"] = strtolower($post_type_obj->labels->singular_name); } } $context["duplicated_post_edit_link"] = get_edit_post_link($duplicated_post_id); $context["new_post_edit_link"] = get_edit_post_link($new_post_id); // If post is not available any longer then we can't link to it, so keep plain message then // Also keep plain format if user is not allowed to edit post (edit link is empty) if ($post_is_available && $context["duplicated_post_edit_link"]) { $message = _x('Cloned {duplicated_post_post_type_singular_name} "{duplicated_post_title}" to a new {duplicated_post_post_type_singular_name}', "Logger: Plugin Duplicate Post", "simple-history"); } // post still available $context["new_post_edit_link"] = isset($context["new_post_edit_link"]) ? esc_html($context["new_post_edit_link"]) : ""; $context["duplicated_post_edit_link"] = isset($context["duplicated_post_edit_link"]) ? esc_html($context["duplicated_post_edit_link"]) : ""; $context["duplicated_post_title"] = isset($context["duplicated_post_title"]) ? esc_html($context["duplicated_post_title"]) : ""; $context["duplicated_post_title"] = isset($context["duplicated_post_title"]) ? esc_html($context["duplicated_post_title"]) : ""; $context["duplicated_post_post_type_singular_name"] = isset($context["duplicated_post_post_type_singular_name"]) ? esc_html($context["duplicated_post_post_type_singular_name"]) : ""; return $this->interpolate($message, $context, $row); } } // class } // class exists