将帖子从一个博客复制到另一个博客后出现W3C RSS错误

时间:2012-12-09 07:13:13

标签: mysql wordpress rss

脚本将某个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;
    }
  }
}

我无法弄清楚如何解决这个问题,并感谢您的任何帮助。

1 个答案:

答案 0 :(得分:0)

W3C错误显示日期格式错误且guid丢失。

创建帖子时添加以下字段可以解决第一个错误:

post_date_gmtpost_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 . "'
     )";

  ...