2012-04-21 12 views
5

Actualmente, traslado mi sistema de comentarios a los comentarios predeterminados de Wordpress. Estaba usando Disqus antes, pero decidí retroceder. Disqus proporciona una herramienta en la que puede exportar todos sus comentarios pero, desafortunadamente, le proporcionarán el formato XML. Lo peor es que WordPress solo lee el formato de archivo WXR.Cómo importar los comentarios XML exportados de Disqus a Wordpress WXR

Mi solución a esto es que debo reescribir manualmente lo que Disqus me dio (me refiero al archivo XML que exporté de disqus) al formato de archivo WordPress WXR. Mi problema es que no sé cuál es la estructura básica de los comentarios de WordPress requeridos.

You can view the Disqus Exported XML file here! Mi única preocupación aquí es que solo necesito una plantilla o formato que pueda seguir sobre cómo escribir un archivo WXR correcto para poder importarlo directamente en mi WordPress usando la Herramienta de importación. Por cierto, cuando intento cargar el archivo XML para WordPress, me sale este error:

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

Respuesta

4

El complemento Disqus WordPress incluye una función de sincronización que sincronizará sus comentarios de Disqus a su instalación de WordPress. Se puede ubicar en la pestaña Opciones avanzadas dentro del complemento.

+0

En caso de que tenga dificultades para utilizar la función de sincronización, lea esta guía oficial: https://help.disqus.com/customer/portal/articles/960360-syncing-with-wordpress –

3

En lugar de tratar de generar un formato de archivo WXR, puede ser más fácil analizar el archivo XML Disqus e insertar los comentarios que extrae de allí directamente en la tabla wp_comments en su base de datos de WordPress. Al menos de esta manera, tienes un mejor control del proceso.

El complemento anterior puede no funcionar porque Disqus cambia de vez en cuando el formato de exportación (curiosamente ni siquiera puede usar el archivo exportado para volver a importar sus comentarios a Disqus).

For my service tuve que volver a escribir ya dos veces el analizador para adaptarlo a las pequeñas pero molestas variaciones de Disqus XML

1

tengo el mismo problema con la importación de comentarios Disqus a mi nueva página web. Recientemente me di cuenta de alguna manera para hacer el análisis e insertar los comentarios en la base de datos de WordPress, todo está escrito sólo en PHP consulte este this link, cualquier comentario es bienvenido

Este es el código

// 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; 

} 
Cuestiones relacionadas