W3C RSS error after copying posts from one blog to another

There is something wrong with the script that copies last posts from one WordPress blog to another in different domains.

Everything works fine and we have been using the script for over a year. Nevertheless, the RSS feeds for the copied posts are never validated by W3C.

Read More

The typical error displayed by W3C for those posts, is this one:

This feed does not validate.
line 25, column 43: pubDate must be an RFC-822 date-time: Wed, 30 Nov -0001 00:00:00 +0000 [help]
Wed, 30 Nov -0001 00:00:00 +0000
In addition, interoperability with the widest range of feed readers could be improved by implementing the following recommendation.
line 28, column 28: guid should not be blank (8 occurrences) [help]

The script is executed outside and don’t have access to WP functions or the wpdb class.

All functions are in a class. Here is the code:

 /**

 */
class CopyPostClass {

  /**
   * @param $PostTitle
   * @param $PostContent
   * @param $PostSlug
   * @param $PostType
   * @param $AuthorID
   * @return bool
   */
  public function SavePostTarget( $PostTitle, $PostContent, $AuthorID, $PostSlug, $PostType ) {

    global $TargetLink;

    $PostDate  = new DateTime( date( 'Y-m-d H:i:s' ) );
    $PostTitle = str_replace( "'", '"', $PostTitle );

    $SavePostQuery = "INSERT INTO  wp_posts  (
     post_title,
     post_content,
     post_author,
     post_name,
     post_type,
     post_date,
     post_modified,
     post_status
     )
     VALUES (
     '" . $PostTitle . "',
     '" . $PostContent . "',
     '" . $AuthorID . "',
     '" . $PostSlug . "',
     '" . $PostType . "',
     '" . $PostDate->format( 'Y-m-d H:i:s' ) . "',
     '" . $PostDate->format( 'Y-m-d H:i:s' ) . "',
     'publish'
     )";

    $SavePostResult = mysql_query( $SavePostQuery, $TargetLink );
    $SavedRows      = mysql_affected_rows( $TargetLink );
    if ( $SavePostResult && $SavedRows > 0 ) {
      return TRUE;
    }
    else {
      echo "ERROR Saving new post to target WP Blog!<br /><br />";
      echo mysql_error() . "<br /><br />";
      return FALSE;
    }
  }

  /**
   * @return resource
   */
  public function ConnectSource() {

    $SourceHost     = 'SourceDomainn.com';
    $SourceUsername = 'SourceDomainUserName';
    $SourcePassword = 'SourceDomainPass';
    $SourceDatabase = 'SourceDomainDataBase';

    $SourceLink = mysql_connect( $SourceHost, $SourceUsername, $SourcePassword );
    mysql_select_db( $SourceDatabase, $SourceLink ) or die( "Unable to select Source database" );
    mysql_set_charset( 'utf-8', $SourceLink );

    if ( !$SourceLink ) {
      echo "Conection to source WP Blog Database FAILED!<br /><br />";
      die;
    }
    else {
      return $SourceLink;
    }
  }

  /**
   * @return resource
   */
  public function ConnectTarget() {

    $TargetHost     = 'TargetDomain.com';
    $TargetUsername = 'TargetDomainUserName';
    $TargetPassword = 'TargetDomainPass';
    $TargetDatabase = 'TargetDomainDataBase';

    $TargetLink = mysql_connect( $TargetHost, $TargetUsername, $TargetPassword );
    mysql_select_db( $TargetDatabase, $TargetLink ) or die( "Unable to select Target database" );
    mysql_set_charset( 'utf-8', $TargetLink );

    if ( !$TargetLink ) {
      echo "Conection to target WP Blog Database FAILED!<br /><br />";
      die;
    }
    else {
      return $TargetLink;
    }
  }
}

I can’t figure out how to resolve this problem and will appreciate any help from you.

Related posts

Leave a Reply

1 comment

  1. The W3C error is showing the date format is wrong and the guid is missing.

    The first error can be solved adding these fields when creating the post:

    post_date_gmt and post_modified_gmt

    On the other hand, the recommendation about the guid can be met adding this field:

    guid

    Like this:

      public function SavePostTarget( $PostTitle, $PostContent, $AuthorID, $PostSlug, $PostType ) {
    
      $PostDate   = new DateTime( date( 'Y-m-d H:i:s' ) );
      $PostTitle  = str_replace( "'", '"', $PostTitle );
    
      $GMTDate    = gmdate( 'Y-m-d H:i:s' ); // ADDED - GMT Date Time should be included to avoid RSS errors
      $TargetHost = 'TargetDomain.com'; // ADDED
      $PostGuid   = "$TargetHost/$PostSlug"; // ADDED - Guid should be included to avoid RSS errors
    
      $SavePostQuery = "INSERT INTO  wp_posts  (
         post_title,
         post_content,
         post_author,
         post_name,
         post_type,
         post_date,
         post_modified,
         post_status,
         post_date_gmt,
         post_modified_gmt,
         guid
         )
         VALUES (
         '" . $PostTitle . "',
         '" . $PostContent . "',
         '" . $AuthorID . "',
         '" . $PostSlug . "',
         '" . $PostType . "',
         '" . $PostDate->format( 'Y-m-d H:i:s' ) . "',
         '" . $PostDate->format( 'Y-m-d H:i:s' ) . "',
         'publish',
         '" . $GMTDate . "',
         '" . $GMTDate . "',
         '" . $PostGuid . "'
         )";
    
      ...