脚本将某个Wordpress博客的最后帖子复制到不同域中的另一个帖子时出现问题。
一切正常,我们使用脚本超过一年。尽管如此,W3C永远不会验证复制帖子的RSS提要。
W3C为这些帖子显示的典型错误是:
此Feed无效。 第25行,第43栏:pubDate必须是RFC-822日期时间:星期三,11月30日-0001 00:00:00 +0000 [帮助] 11月30日星期三-0001 00:00:00 +0000 此外,通过实施以下建议,可以改善与最广泛的饲料阅读器的互操作性。 第28行,第28栏:guid不应为空(8次出现)[help]
脚本在外部执行,无法访问WP功能或wpdb
类。
所有功能都在课堂上。这是代码:
/**
*/
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;
}
}
}
我无法弄清楚如何解决这个问题,并感谢您的任何帮助。
答案 0 :(得分:0)
W3C错误显示日期格式错误且guid丢失。
创建帖子时添加以下字段可以解决第一个错误:
post_date_gmt
和post_modified_gmt
另一方面,添加此字段可以满足有关guid
的建议:
guid
像这样:
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 . "'
)";
...