在页面加载时创建外部XML文件

时间:2014-02-14 16:21:46

标签: php xml wordpress fopen

基本上我为自定义帖子类型'经销商'设置了一个WPAlchemy元数据箱,我想生成一个XML文件,其中包含来自所有经销商帖子的格式化元数据,以便数据可用于标记谷歌地图。这是我目前在我的functions.php文件中基于Write to XML file using fopen in Wordpress

的内容
<?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。我错过了什么?任何帮助将不胜感激!

2 个答案:

答案 0 :(得分:0)

添加此代码以检查写入文件是否成功。

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

答案 1 :(得分: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); 
?>