创建更新XML的挂钩时出现的问题

时间:2011-09-07 作者:Spamshield

我一直在为Wordpress开发一个插件,该插件使用帖子中的元素更新XML文件。我使用了一个第三方插件来创建XML字段,到目前为止,这是可行的。

我在XML和挂钩本身方面遇到了很多问题。我正在使用php4every1中的DomDocument示例。com,每当我在php文件中单独运行它时,它都会工作。但是,如果我将其包含在一个与wordpress中发布帖子相关的函数中,则会出现以下错误:“该插件在激活期间生成了1个字符的意外输出。如果您注意到“标题已发送”消息、联合提要问题或其他问题,请尝试停用或删除该插件。”什么也没发生。包含XML的函数根本不会运行,我也不知道为什么。

这是我的代码:

<?php

add_action(\'publish_post\',\'update_xml\');

function update_xml(){

  $xml = new DOMDocument(\'1.0\', \'utf-8\'); 
  $xml->formatOutput = true; 
  $xml->preserveWhiteSpace = false; 
  $xml->load(\'fruits.xml\');

  //Get item Element 
  $element = $xml->getElementsByTagName(\'item\')->item(0);

  //Load child elements 
  $name = $element->getElementsByTagName(\'name\')->item(0); 
  $price = $element->getElementsByTagName(\'price\')->item(0); 
  $count = $element->getElementsByTagName(\'count\')->item(0);

  //Change values 
  $name->nodeValue = \'Orange\'; 
  $price->nodeValue = 14.33;

  //Create new element 
  $newCount = $xml->createElement(\'count\', 10);

  //Replace old elements with new 
  $element->replaceChild($name, $name); 
  $element->replaceChild($price, $price); 
  $element->replaceChild($newCount, $count);

  //Create one new item element 
  $newItem = $xml->createElement(\'item\'); 
  $newItem->appendChild($xml->createElement(\'name\', \'hest\')); 
  $newItem->appendChild($xml->createElement(\'price\', 10.59)); 
  $newItem->appendChild($xml->createElement(\'count\', 131));

  //Add it to fruits element 
  $xml->getElementsByTagName(\'fruits\')->item(0)->appendChild($newItem); 
  $xml->save(\'fruits.xml\');

}

?>
和xml文件:

<?xml version="1.0" encoding="UTF-8"?> <fruits>

<item>
    <name>Apple</name>
    <price>10.25</price>
    <count>15</count>
</item>

</fruits>
正如我所说,每当我在一个没有钩子和函数的单独php文件中运行它时,上面的内容都会起作用,但在插件的钩子中,它会断开。我对编程、php和wordpress很陌生,所以我打赌我忽略了一些愚蠢的东西,但什么呢?

提前谢谢。

编辑:我在激活插件时遇到此错误:“该插件在激活期间生成了1个字符的意外输出。如果您注意到“headers ready sent”消息、联合提要问题或其他问题,请尝试停用或删除此插件。”

2 个回复
最合适的回答,由SO网友:Milo 整理而成

1个字符的输出错误可能是因为之前只有一个空格<?php 或之后?>.

只要它什么都不做,水果在哪里。xml文件?该行:

$xml->load(\'fruits.xml\');
在此上下文中,正在以下位置查找文件:

/your/server/path/to/wp-admin/fruits.xml
我想这不是你所期望的。看看Determining Plugin and Content Directories 在法典中。

SO网友:kaiser

稍微扩展一下@Milo answer:“headers ready sent”消息可能是由eg中的echo语句引起的。register_activation_hook() 功能。

结束

相关推荐

Google XML站点地图在目录安装上不起作用

我已经在名为“wp”的根目录上方安装了wordpress。我对google xml站点地图生成器有问题。我无法重建xml代码并将其写入站点地图。xml文件。我与我的托管公司通了电话,他们向我保证该文件对其文件权限具有完全控制权。有人对此有什么建议吗?