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.
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.
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
andpost_modified_gmt
On the other hand, the recommendation about the
guid
can be met adding this field:guid
Like this: