5

ある Wordpress ブログから別のドメインの別のブログに最新の投稿をコピーするスクリプトに問題があります。

すべてが正常に機能し、スクリプトを 1 年以上使用しています。それにもかかわらず、コピーされた投稿の 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 回出現) [ヘルプ]

wpdbスクリプトは外部で実行され、WP 関数またはクラスにアクセスできません。

すべての関数はクラスにあります。コードは次のとおりです。

 /**

 */
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 に答える