5

将最后一篇文章从一个 Wordpress 博客复制到不同域中的另一个的脚本有问题。

一切正常,我们已经使用该脚本一年多了。尽管如此,所复制帖子的 RSS 提要从未经过 W3C 验证。

W3C 为这些帖子显示的典型错误是:

此提要未验证。第 25 行,第 43 列:pubDate 必须是 RFC-822 日期时间:Wed, 30 Nov -0001 00:00:00 +0000 [help] Wed, 30 Nov -0001 00:00:00 +0000 此外,互操作性通过实施以下建议,可以改进使用范围最广的提要阅读器。第 28 行,第 28 列:guid 不应为空(出现 8 次)[帮助]

该脚本在外部执行,无法访问 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;
    }
  }
}

我不知道如何解决这个问题,并感谢您的帮助。

4

1 回答 1

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

  ...
于 2012-12-09T08:37:09.250 回答