基本上我为自定义帖子类型'经销商'设置了一个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。我错过了什么?任何帮助将不胜感激!
答案 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);
?>