Take the 2-minute tour ×
WordPress Development Stack Exchange is a question and answer site for WordPress developers and administrators. It's 100% free, no registration required.

After seeing some weird hits in my Relevanssi search results I found the following:

http://wordpress.org/support/topic/searching-with-relevanssi-shows-all-revisions

I ran the following on my WordPress database:

SELECT * FROM  `wp_posts` 
  WHERE (`post_name` LIKE "%revision%" OR `post_name` LIKE "%autosave%")
  AND `post_status` = "inherit"
  AND `post_parent` !=0
  AND `post_type` !=  "revision"

It returned almost 2,000 rows. This means that many of the "revision" records in my wp_posts table are ending up with the wrong post type.

http://codex.wordpress.org/Revision_Management currently states the following:

Revisions are stored as children of their associated post (the same thing we do for attachments). They are given a post_status of 'inherit', a post_type of 'revision', and a post_name of {parent ID}- revision(-#) for regular revisions and {parent ID}-autosave for autosaves.

In my case these revision records are maintaining the original post type such as "page" or "my-custom-post-type" instead of being changed to "revision."

Any ideas why these records have the wrong post type? I read it may have to do with my custom post type definitions, but if so, why is it happening with "page" records as well?

share|improve this question
    
This should not be happening, could you tell us what plugins you have activated and what theme, and if any of them have been modified/customised from their originals? –  Tom J Nowell Mar 29 '12 at 17:38
    
I created a listing of active plugins here: gist.github.com/2242493. In addition I had the "Post Type Switcher (1.0)" plugin active until recently. –  robertwbradford Mar 29 '12 at 19:21
1  
It looks like it's the Post Type Switcher plugin. Boo. When that plugin is activated, the revisions get saved with the original post type. When I deactivated the plugin and updated a post, the "revision" post type was correctly applied. –  robertwbradford Mar 29 '12 at 19:58
add comment

2 Answers

up vote 0 down vote accepted

Have you tried adding an extra clause checking for the revision post type in function pts_save_post( $post_id, $post ) { of post-type-switcher.php ?

E.g. as taken from trunk and modified:

/**
 * Set the post type on save_post but only when editing
 *
 * @since PostTypeSwitcher (0.3)
 * @global string $pagenow
 * @param int $post_id
 * @param object $post
 * @return If any number of condtions are met
 */
function pts_save_post( $post_id, $post ) {
    global $pagenow;

    // Only show switcher when editing
    if ( ! in_array( $pagenow, pts_allowed_pages() ) )
        return;

    if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE )
        return;

    if ( ! isset( $_POST['pts-nonce-select'] ) )
        return;

    if ( ! wp_verify_nonce( $_POST['pts-nonce-select'], 'post-type-selector' ) )
        return;

    if ( ! current_user_can( 'edit_post', $post_id ) )
        return;

    if ( $_POST['pts_post_type'] == $post->post_type )
        return;

    if ( ! $new_post_type_object = get_post_type_object( $_POST['pts_post_type'] ) )
        return;     

    if ( ! current_user_can( $new_post_type_object->cap->publish_posts ) )
        return;

    if($post->post_type == 'revision')
        return;

    set_post_type( $post_id, $new_post_type_object->name );
}
add_action( 'save_post', 'pts_save_post', 10, 2 );
share|improve this answer
    
Bueno. This looks like it is working. Thank you!! (See my answer for instructions on fixing a database that has already been affected.) –  robertwbradford Mar 30 '12 at 13:47
add comment

As of now the Post Type Switcher plugin is causing this problem. (See this forum post.)

After deactivating the plugin, I ran the following to update the database:

UPDATE `wp_posts` set `post_type` = "revision"
  WHERE (`post_name` LIKE "%revision%" OR `post_name` LIKE "%autosave%")
  AND `post_status` = "inherit"
  AND `post_parent` != 0
  AND `post_type` != "revision"

WARNING: Backup up your database first! :)

WARNING: If you're on a WordPress network install be sure to change wp_posts to wp_XX_posts (where "XX" is the id of your site) and run it for each one.

share|improve this answer
add comment

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.