2014-02-14 84 views
0

基本上,我爲自定義帖子類型'dealer'設置了一個WPAlchemy元組,並且我想生成一個XML文件,其中包含來自所有經銷商帖子的格式化元數據,以便數據可以用於谷歌地圖上的標記。下面是我在我functions.php文件到目前爲止基於斷Write to XML file using fopen in Wordpress在頁面加載時創建外部XML文件

<?php function markers_xml() { 
    if ($_POST['post_type'] == 'es_dealer') { 
     $xml = new SimpleXMLElement('<xml/>'); 
     $markers = get_posts('post_type=es_dealer&posts_per_page=-1'); 

     $xml->addChild('markers'); 

     foreach($markers as $i=>$marker) { 
      $name = get_the_title($marker->ID); 
      $lat = get_post_meta($marker->ID, 'lat', true); 
      $lng = get_post_meta($marker->ID, 'long', true); 

      $xml->markers->addChild('marker'); 
      $xml->markers->marker[$i]->addAttribute('name', $name); 
      $xml->markers->marker[$i]->addAttribute('lat', $lat); 
      $xml->markers->marker[$i]->addAttribute('lng', $lng); 
     } 

     $file = 'http://encode-design.com/wp-content/uploads/test.xml'; 
     $open = fopen($file, 'w') or die ("File cannot be opened."); 
     fwrite($open, $xml->asXML()); 
     fclose($open); 
    } 
} 
add_action('save_post', 'markers_xml'); ?> 

當我節省了經銷商後我沒有得到一個消息,說「文件無法打開。」但是xml文件也沒有改變。我已經將xml文件和uploads文件夾權限設置爲777,並且在我的服務器上啓用了fopen。我錯過了什麼?任何幫助將非常感激!

+0

如果您直接將文件名傳遞給asXML,您可以跳過fopen和fwrite,如:'$ xml-> asXML($ file);'。不確定它會解決問題,但它會以解決方案的方式去除額外的一層。 – Anthony

回答

0

我切換到file_put_contents()而不是fopen,fwrite和fclose,它做到了!還簡化了我的文件路徑。

<?php 
$xml = new SimpleXMLElement('<xml/>'); 
$markers = get_posts('post_type=es_dealer&posts_per_page=-1'); 
$xml->addChild('markers'); 
foreach($markers as $i=>$marker) { 
    global $dealer_mb; 
    $meta = $dealer_mb->the_meta($marker->ID); 
    $name = get_the_title($marker->ID); 
    $lat = $meta['lat']; 
    $lng = $meta['long']; 

    $xml->markers->addChild('marker'); 
    $xml->markers->marker[$i]->addAttribute('name', $name); 
    $xml->markers->marker[$i]->addAttribute('lat', $lat); 
    $xml->markers->marker[$i]->addAttribute('lng', $lng); 
} 
$file = 'testing.xml'; 
$current = $xml->asXML(); 
file_put_contents($file,$current); 
?> 
0

添加此代碼以檢查寫入文件是否成功。

if(!fwrite($open, $xml->asXML())) 
{ 
    echo 'error'; 
} 
else 
{ 
    echo 'success'; 
} 
相關問題