2012-04-21 12 views
5

Attualmente sto spostando il mio sistema di commenti ai commenti di Wordpress predefiniti. Stavo usando Disqus prima, ma ho deciso di tornare indietro. Disqus fornisce uno strumento per esportare tutti i tuoi commenti ma sfortunatamente ti forniranno il formato XML. La cosa peggiore è che WordPress legge solo il formato di file WXR.Come importare i commenti esportati XML di Disqus in Wordpress WXR

La mia soluzione a questo è che dovrei riscrivere manualmente ciò che Disqus mi ha dato (intendo il file XML che ho esportato da disqus) nel formato di file WXR di WordPress. Il mio problema è che non so quale sia la struttura di base dei commenti di WordPress richiesti.

You can view the Disqus Exported XML file here! La mia unica preoccupazione qui è che ho solo bisogno di un modello o un formato che posso seguire su come scrivere un commento di file WXR corretto in modo che io possa importarlo direttamente nel mio WordPress usando l'Import Tool. A proposito, quando provo a caricare il file XML su WordPress, ottengo questo errore:

Invalid file. Please upload a valid Disqus export file."

risposta

4

Il plug-in Disqus di WordPress include una funzione di sincronizzazione che sincronizzerà i commenti da Disqus all'installazione di WordPress. Può essere posizionato nella scheda Opzioni avanzate all'interno del plugin.

+0

In caso di difficoltà nell'utilizzo della funzione di sincronizzazione, leggere questa guida ufficiale: https://help.disqus.com/customer/portal/articles/960360-syncing-with-wordpress –

3

Invece di provare a generare un formato di file WXR, potrebbe essere più semplice analizzare il file XML di Disqus e inserire i commenti estratti da lì direttamente nella tabella wp_comments nel database di wordpress. Almeno in questo modo hai un migliore controllo del processo.

Il plug-in riportato sopra potrebbe non funzionare perché Disqus modifica di volta in volta il formato di esportazione (stranamente non è nemmeno possibile utilizzare il file esportato per importare nuovamente i commenti su Disqus).

For my service ho dovuto riscrivere già due volte il parser per adattarlo ai piccoli ma fastidiosi variazioni di Disqus XML

1

Ho lo stesso problema con l'importazione di commento Disqus al mio nuovo sito web. Recentemente ho capito un modo per fare il parsing e inserire i commenti in database di WordPress, tutto è scritto solo in PHP si prega di fare riferimento a questo this link, tutte le risposte è il benvenuto

Ecco il codice

// start to count the timer 

$start  = microtime(true); 

$max_duration = ”; 

// get content of file and parse the xml 

$xml = simplexml_load_file(‘yourmxlfilesource.xml’); 

// initiate database connection 

$database_info[ 'hostname' ] = “”; // database hostname 

$database_info[ 'database' ] = “”; // database name 

$database_info[ 'username' ] = “”; // database username 

$database_info[ 'password' ] = “”; // database password 

$database_connect = mysql_pconnect($database_info[ 'hostname' ], $database_info[ 'username' ], $database_info[ 'password' ]) or trigger_error(mysql_error(), E_USER_ERROR); 

mysql_select_db($database_info[ 'database' ], $database_connect); 

$i = 0; 

// get all the comment from xml file 

$comments = get_post(); 

// get all the post title array from xml file 

$post_title = get_post_title_array(); 

$comment_result = array(); 

$temp   = array(); 

// create loop to convert from xml comment into wordpress-format comment 

foreach ($comments as $comment) { 

$start_sub = microtime(true); 
$comment_result[ 'comment_post_ID' ]  = get_post_id($comment->thread->attributes(‘dsq’, TRUE)->id); 

$comment_result[ 'comment_author' ]  = $comment->author->name; 

$comment_result[ 'comment_author_email' ] = $comment->author->email; 

$comment_result[ 'comment_author_url' ] = ”; 

$comment_result[ 'comment_author_IP' ] = $comment->ipAddress; 

$comment_result[ 'comment_date' ]   = sanitize_date($comment->createdAt); 

$comment_result[ 'comment_date_gmt' ]  = sanitize_date($comment->createdAt); 

$comment_result[ 'comment_content' ]  = strip_tags(mysql_real_escape_string($comment->message), ‘<br><img><a>’); 

$comment_result[ 'comment_karma' ]  = 1; 
// check if comment is spam, deleted or approved 
if ($comment->isSpam == ‘true’) { 

$comment_approved = ‘spam’; 

} else if ($comment->isDeleted == ‘true’) { 

$comment_approved = ‘trash’; 

} else { 

$comment_approved = 1; 

} 
$comment_result[ 'comment_approved' ] = $comment_approved; 

$comment_result[ 'comment_agent' ] = ”; 

$comment_result[ 'comment_type' ]  = ”; 

$comment_result[ 'comment_parent' ] = ”; 

$comment_result[ 'user_id' ]   = ”; 
// store the wordpress format comment into temporary variable 
$temp[ $i ] = $comment_result; 
// insert the wordpress format comment into wp database 

insert_comment($temp[ $i ]); 

$duration[ $i ] = microtime(true) – $start_sub; 
$i++; 

} 

echo ‘max duration : ‘ . max($duration) . ‘<br/>’; 

echo ‘min duration : ‘ . min($duration) . ‘<br/>’; 

echo ‘average duration : ‘ . (array_sum($duration)/count($duration)) . ‘<br/>’; 



// show the total duration of process 

echo ‘total duration : ‘ . (microtime(true) – $start); 

///////// define function here 

function insert_comment($comment) 

{ 

global $database_connect; 
// function to insert the comment into wp database 
$field = ”; 

$values = ”; 
foreach ($comment as $key => $value) { 

// create sql query to insert the comment 

$field .= ‘`’ . $key . ‘`’ . ‘,’; 

$values .= ‘”‘ . $value . ‘”‘ . ‘,’; 

} 
$field = rtrim($field, ‘,’); 

$values = rtrim($values, ‘,’); 
// insert the comment into the database 
$query = “INSERT INTO `wp_comments` ($field) VALUES ($values)”; 

$query_result = mysql_query($query, $database_connect) or die(mysql_error()); 

} 

function sanitize_date($date) 

{ 

// remove the additional string from the date 
$date = str_replace(‘T’, ‘ ‘, $date); 

$date = str_replace(‘Z’, ‘ ‘, $date); 
return $date; 

} 

function get_post_id($thread) 

{ 

global $post_title, $database_connect; 

// get wordpress post id from disqus thread id 
$thread_title = find_thread(‘id’, $thread, ‘title’); // get the title of the post 
$thread_title = explode(‘/’, $thread_title); 

$thread_title = $thread_title[ count($thread_title) - 1 ]; 

$thread_title = str_replace(‘-’, ‘ ‘, $thread_title); 
$thread_title = str_replace(‘.html’, ”, $thread_title); 
$post_title_closest = get_closest_post_title($thread_title, $post_title); 
// get the wordpress post id from the title of the post 
$query = “SELECT `ID` FROM `wp_posts` WHERE `post_title` = ‘$post_title_closest’ LIMIT 1″; 

$query_result = mysql_query($query, $database_connect) or die(mysql_error()); 
$query_result_row = mysql_fetch_assoc($query_result); 

return $query_result_row[ 'ID' ]; 
} 

function get_closest_post_title($input, $words) 

{ 

// no shortest distance found, yet 

$shortest = -1; 
// loop through words to find the closest 

foreach ($words as $word) { 
// calculate the distance between the input word, 

// and the current word 

$lev = levenshtein($input, $word); 
// check for an exact match 

if ($lev == 0) { 
// closest word is this one (exact match) 

$closest = $word; 

$shortest = 0; 
// break out of the loop; we’ve found an exact match 
break; 

} 
// if this distance is less than the next found shortest 

// distance, OR if a next shortest word has not yet been found 

if ($lev <= $shortest || $shortest < 0) { 

// set the closest match, and shortest distance 

$closest = $word; 

$shortest = $lev; 

} 
} 

return $closest; 

} 

function get_post_title_array() 

{ 

// get wordpress post id from disqus thread id 
global $database_connect; 
// get the wordpress post id from the title of the post 
$query = “SELECT DISTINCT(`post_title`) FROM `wp_posts`”; 

$query_result = mysql_query($query, $database_connect) or die(mysql_error()); 
$query_result_row = mysql_fetch_assoc($query_result); 
$i = 0; 
do { 

$result[ $i ] = $query_result_row[ 'post_title' ]; 

$i++; 

} while ($query_result_row = mysql_fetch_assoc($query_result)); 
return $result; 
} 

function find_thread($category, $source_value, $return_category) 

{ 

// function to get thread information 
global $xml; 
foreach ($xml->children() as $row) { 
if ((int) $row->attributes(‘dsq’, TRUE)->id == (int) $source_value) { 

return $row->$return_category; 

} 

} 
} 

function get_post() 

{ 

// function to get all post from xml data 
global $xml; 
$i = 0; 
foreach ($xml->children() as $key => $value) { 
if ($key == ‘post’) { 
$result[ $i ] = $value; 

$i++; 

} 

} 
return $result; 

} 
Problemi correlati