2012-12-09 4 views
5

Es ist etwas falsch mit dem Skript, das letzte Beiträge von einem Wordpress-Blog zu einem anderen in verschiedenen Domänen kopiert.W3C RSS-Fehler nach dem Kopieren von Beiträgen von einem Blog zu einem anderen

Alles funktioniert gut und wir verwenden das Skript seit über einem Jahr. Nichtsdestotrotz werden die RSS-Feeds für die kopierten Beiträge niemals von W3C validiert.

Der typische Fehler von W3C für die Beiträge angezeigt werden, ist diese:

Dieser Feed lässt sich aber nicht. Zeile 25, Spalte 43: pubDate muss ein RFC-822 Datum-Uhrzeit sein: Mi, 30 Nov -0001 00:00:00 +0000 [Hilfe] Mi, 30 Nov -0001 00:00:00 +0000 In Darüber hinaus könnte die Interoperabilität mit den meisten Lesegeräten verbessert werden, indem die folgende Empfehlung umgesetzt wird. Zeile 28, Spalte 28: guid sollte nicht leer sein (8 Vorkommen) [Hilfe]

Das Skript wird außerhalb ausgeführt und hat keinen Zugriff auf WP-Funktionen oder die wpdb Klasse.

Alle Funktionen sind in einer Klasse. Hier ist der 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; 
    } 
    } 
} 

Ich kann nicht herausfinden, wie Sie dieses Problem lösen und wird jede Hilfe von Ihnen zu schätzen wissen.

+0

¿Sehen Sie ein Datum in der Post? Wenn ja, wie ist das Format und der Wert. –

+0

Das ist eines der merkwürdigsten Dinge. Das Format ist korrekt und das Datum, an dem der Beitrag erstellt wurde. –

Antwort

0

Der W3C-Fehler zeigt das Datumsformat ist falsch und die GUID fehlt.

Der erste Fehler Hinzufügen dieser Felder gelöst werden kann, wenn die Post zu schaffen:

post_date_gmt und post_modified_gmt

Auf der anderen Seite, die Empfehlung über die guid dieses Feld erfüllt werden können und fügte hinzu:

guid

So:

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

    ... 
+0

Ich werde es versuchen. Vielen Dank! –

+0

Großartig! Das hat es getan. Vielen Dank für Ihre Zeit und Hilfe. Ich dachte nicht, dass das nötig wäre. –

+0

Gern geschehen. –