2012-04-21 14 views
5

Obecnie przenosimy system komentarzy z powrotem do domyślnych komentarzy Wordpress. Używałem Disqus wcześniej, ale postanowiłem wrócić. Disqus dostarcza narzędzie do eksportu wszystkich komentarzy, ale niestety dostarczy ci formatu XML. Najgorsze jest to, że WordPress odczytuje jedynie format pliku WXR.Jak zaimportować Disqus XML Eksportowane komentarze do Wordpressa WXR

Moim rozwiązaniem jest ręczne przepisanie tego, co Disqus dał mi (mam na myśli plik XML wyeksportowany z disqus) do formatu pliku WordPress WXR. Mój problem polega na tym, że nie wiem, jaka jest podstawowa struktura wymaganych komentarzy WordPress.

You can view the Disqus Exported XML file here! Moim jedynym zmartwieniem jest to, że potrzebuję szablonu lub formatu, w którym mogę napisać poprawne komentarze do pliku WXR, aby móc zaimportować go bezpośrednio w moim WordPressie przy użyciu narzędzia do importowania. Przy okazji, kiedy próbuję przesłać plik XML do WordPress, pojawia się następujący błąd:

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

Odpowiedz

4

Wtyczka Disqus WordPress zawiera funkcję synchronizacji, która zsynchronizuje twoje komentarze z Disqus z powrotem do instalacji WordPress. Może znajdować się na karcie Advanced Options w wtyczce.

+0

Jeśli napotkasz trudności w korzystaniu z funkcji synchronizacji, przeczytaj ten oficjalny przewodnik: https://help.disqus.com/customer/portal/articles/960360-syncing-with-wordpress –

3

Zamiast próbować wygenerować format pliku WXR może być łatwiej przeanalizować plik Disqus XML i wstawić komentarze wyodrębnione bezpośrednio do tabeli wp_comments w bazie danych wordpress. Przynajmniej w ten sposób masz lepszą kontrolę nad procesem.

Powyższa wtyczka może nie działać, ponieważ Disqus zmienia od czasu do czasu format eksportu (co dziwne, nie można nawet użyć wyeksportowanego pliku, aby ponownie zaimportować komentarze do Disqus).

For my service musiałem przepisać już dwukrotnie parser w celu dostosowania go do drobnych ale uciążliwych wahań Disqus XML

1

Mam ten sam problem z importem Disqus komentarz do mojej nowej stronie internetowej. Ostatnio zorientowałem się jakiś sposób, aby wykonać parsowanie i wstawianie komentarzy w Wordpress bazy danych, wszystko jest tylko napisane w PHP Proszę odnieść się do tego this link, każda opinia jest mile widziany

oto kod

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

} 
Powiązane problemy