Php 在页面加载时创建外部XML文件
基本上,我已经为自定义帖子类型“dealer”设置了一个WPAlchemy metabox,我想生成一个XML文件,其中包含来自所有dealer帖子的格式化元数据,以便这些数据可以用于google地图上的标记。以下是我的functions.php文件中基于Php 在页面加载时创建外部XML文件,php,xml,wordpress,fopen,Php,Xml,Wordpress,Fopen,基本上,我已经为自定义帖子类型“dealer”设置了一个WPAlchemy metabox,我想生成一个XML文件,其中包含来自所有dealer帖子的格式化元数据,以便这些数据可以用于google地图上的标记。以下是我的functions.php文件中基于 addChild('markers'); foreach($i=>$marker作为标记){ $name=获取标题($marker->ID); $lat=get\u post\u meta($marker->ID,'lat',true); $
addChild('markers');
foreach($i=>$marker作为标记){
$name=获取标题($marker->ID);
$lat=get\u post\u meta($marker->ID,'lat',true);
$lng=get\u post\u 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='1http://encode-design.com/wp-content/uploads/test.xml';
$open=fopen($file,'w')或die(“无法打开文件”);
fwrite($open,$xml->asXML());
fclose(开放式);
}
}
添加操作('save_post','markers_xml');?>
当我保存经销商帖子时,我没有收到“文件无法打开”的消息,但xml文件也没有任何更改。我已经将xml文件和上载文件夹权限设置为777,并且在我的服务器上启用了fopen。我错过了什么?任何帮助都将不胜感激 添加此代码以检查写入文件是否成功
if(!fwrite($open, $xml->asXML()))
{
echo 'error';
}
else
{
echo 'success';
}
我切换到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);
?>
addChild('markers');
foreach($i=>$marker作为标记){
全球$mb;
$meta=$dealer\u mb->the\u meta($marker->ID);
$name=获取标题($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,$current);
?>
如果您直接将文件名传递给asXML,您可以跳过fopen和fwrite,例如:$xml->asXML($file)代码>。不确定它是否能解决这个问题,但它会在解决方案中删除一个额外的层。
<?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);
?>