Wordpress短代码无效

时间:2018-05-24 15:56:29

标签: php wordpress

我正在构建一个“添加到购物车”按钮,用于将项目(从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';,但我仍然得到相同的空白页结果。

如果需要,我可以提供更多代码,提前谢谢!

1 个答案:

答案 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()做了什么,等等。所以我的这个小例子是一个简短的例子,说明如何打印几行文本来开始调试。用你的真实代码慢慢替换我的示例垃圾,找出它的中断位置。