我正在构建一个“添加到购物车”按钮,用于将项目(从XML代码中提取)放入购物车。按钮的tables.open_file(hdf5.bz2)
正在工作并显示按钮,但是当我尝试实现shortcodes
以显示购物车本身时,页面根本不会呈现按钮或购物车。这是我的一些代码(对PHP和Wordpress来说很新):
在shortcode function
文件中:
shortcodes.php
在add_shortcode('show_cart', 'show_shopping_cart_handler');
主文件中:
plugin.php
在function show_shopping_cart_handler($atts) {
return print_shopping_cart($atts);
}
文件中:
functions.php
真正的问题是,任何人都可以看到我可能做错了或丢失的东西,导致什么都没有显示出来吗?我还尝试将// code for pulling the XML, $product_id is attached to each button
$xml = simplexml_load_file("https://secure.bmtmicro.com/cart?CID=2/WP&PRODUCTID=' . $product_id . '") or wp_die("Error.");
function print_shopping_cart() {
// handles the cart name/text
if (!cart_not_empty()) {
$empty_cart_text = get_option('cart_empty_text');
if (!empty($empty_cart_text)) {
echo '<div class="bmt_cart_empty_cart_section">';
if (preg_match("/http/", $empty_cart_text)) {
echo '<img src="' . $empty_cart_text . '" alt="' . $empty_cart_text . '" class="empty_cart_image" />';
} else {
echo __($empty_cart_text);
}
echo '</div>';
}
}
echo $empty_cart_text;
$title = get_option('cart_title');
echo '<div class="shopping_cart">';
if (!get_option('shopping_cart_image_hide')) {
$cart_icon_img_src = CART_URL . "/images/shopping_cart_icon.png";
$cart_icon_img_src = apply_filters('cart_icon_image_src', $cart_icon_img_src);
echo "<img src='" . $cart_icon_img_src . "' class='cart_header_image' value='" . (__("Cart")) . "' alt='" . (__("cart")) . "' />";
}
if (!empty($title)) {
echo '<h2>';
echo $title;
echo '</h2>';
}
echo '<table style="width: 100%;">';
if ($_SESSION && is_array($_SESSION)) {
echo '
<tr class="cart_item_row">
<th class="cart_item_name_th">' . (__("Product Name")) . '</th><th class"cart_qty_th">' . (__("quantity")) . '</th><th class="cart_price_th">' . (__("Price")) . '</th><th></th>
</tr>';
foreach ($xml->producttable->row() as $product) {
// I will pull more product info, but just using name for testing
$product_name = $product->productname.PHP_EOL;
echo '<tr class="cart_item_thumb"><td class="cart_item_name_td" style="overflow: hidden;">';
echo '<div class="cart_item_info">';
echo '<span class="cart_item_name">' . $product_name . '</span>';
echo '<span class="cart_clear_float"></span>';
echo '</div>';
echo '</td>';
}
}
echo "</table></div>";
}
替换为echo
并执行$output
之类的操作,然后运行$output .= 'some HTML code';
,但我仍然得到相同的空白页结果。
如果需要,我可以提供更多代码,提前谢谢!
答案 0 :(得分:0)
$ xml不在该函数的范围内。您需要传递它,在函数中定义$ xml,或者使$ xml全局化。另外,正如brasofilo所说,短代码处理程序应该返回一个字符串,而不是echo。但既然你提到返回一个字符串或回显产生相同的东西,那么我会说最高的概率是一个实际的错误。就像试图迭代一个没有定义为$ xml的对象一样。
这是我的意思的一个粗略的例子......
function print_shopping_cart() {
global $xml;
但是...... $ xml似乎依赖于产品ID,我们无法知道你是如何填充的。据我们所知,你的$ xml行正在点击or die
部分,这就是为什么你什么都看不见。
现在,正式我会说你应该重建你如何处理这个问题。您可以直接在插件的php文件中定义短代码。
在你的插件的php文件中:
add_shortcode('show_cart', 'show_shopping_cart_handler');
function show_shopping_cart_handler($atts) {
// please note you're not using $atts. We dont know why
$xml = simplexml_load_file('whatever');
return print_shopping_cart($xml);
}
并且在functions.php中我们假设购物车的存在是有原因的,而不仅仅是因为你想要不必要地使事情复杂化,我们实际上传递$ xml并修改函数以期望它...
function print_shopping_cart($xml = false) {
if($xml)
{
return 'xml based string'; // now we know xml was successful
}
else
{
return 'deal with the cart some other way';
}
}
简而言之,请保持您的插件。如果插件处理整个购物车,那么将所有内容移动到插件的php文件中,并且不要将它们全部传播。函数有一个范围。如果你试图访问函数范围之外的变量,它会抛出一个错误,或者只是彻头彻尾的#34;不会这样做。&#34;上面的代码中有一些漏洞阻止我们真正知道它在做什么。我们不知道$product_id
是如何填充的。我们不知道cart_not_empty()
做了什么,等等。所以我的这个小例子是一个简短的例子,说明如何打印几行文本来开始调试。用你的真实代码慢慢替换我的示例垃圾,找出它的中断位置。