我正在使用一个名为WP Auctions 使用List plugin, 正如你可能猜到的那样,它是在一个页面上显示拍卖列表,就像eBay一样,用户可以在其中对物品进行竞价。设置起来很简单。我只需要激活它并插入短代码。
我之所以遇到麻烦,是因为我希望用户能够按价格和日期对拍卖列表进行排序。不幸的是,这个插件没有内置。然而,作者确实在短代码中构建了过滤器,因此我可以使用类似的方法按日期组织列表:
[wpa_list_widget mode="list" order="date"]
或者我可以用这样的方法按价格组织列表:
[wpa_list_widget mode="list" order="price"]
然而,我不能将两个短代码都放在一个页面上。所以我的想法是
jQuery tabs (content via AJAX) 并在页面上包含一个短代码,并通过AJAX调用另一个短代码。然而,这似乎不起作用。
以下是如何设置拍卖页面模板:
<div id="tabs">
<ul>
<li><a href="#tabs-1">Order by date</a></li>
<li><a href="<?php bloginfo(\'template_url\'); ?>/auction_price.php">Order by price</a></li>
</ul>
<div id="tabs-1">
<?php echo do_shortcode(\'[wpa_list_widget mode="list" order="date"]\'); ?>
</div>
</div>
通过此设置,选项卡1显示良好;然而,选项卡2(按价格订购)没有显示任何内容,HTML中也没有显示任何内容。
在上面的代码中,您会注意到我试图调用“auction\\u price”中的内容。php’。以下是我目前的“拍卖价格”。php模板设置:
<?php require(\'./wp-blog-header.php\'); ?>
<?php echo do_shortcode(\'[wpa_list_widget mode="list" order="price"]\'); ?>
只有两条简单的线。最后,下面是启动这一切的脚本:
jQuery(document).ready(function($){
$(function() {
$( "#tabs" ).tabs({
beforeLoad: function( event, ui ) {
ui.jqXHR.error(function() {
ui.panel.html(
"Load fail." );
});
}
});
});
});
任何帮助都将不胜感激!
SO网友:Upeksha
<a href="<?php bloginfo(\'template_url\'); ?>/auction_price.php">Order by price</a>
auction-price.php
位于模板目录中。
那么你不能包括wp-blog-header.php
在模板目录中使用require(“./wp blog header.php”)。
因此,没有WordPress,do\\u shortcode()无法工作。
在WordPress中使用ajax的正确方法是通过admin-ajax.php
阅读Codex的更多信息:
http://codex.wordpress.org/AJAX_in_Plugins
例如,在
functions.php
:
function wpse_77197_auction_price(){
echo do_shortcode(\'[wpa_list_widget mode="list" order="price"]\');
die();
}
add_action(\'wp_ajax_price_action\', \'wpse_77197_auction_price\');
add_action(\'wp_ajax_nopriv_price_action\', \'wpse_77197_auction_price\');
在模板文件中:
<div id="tabs">
<ul>
<li><a href="#tabs-1">Order by date</a></li>
<li><a href="<?php echo admin_url(\'admin-ajax.php\'); ?>?action=price_action">Order by price</a></li>
</ul>
<div id="tabs-1">
<?php echo do_shortcode(\'[wpa_list_widget mode="list" order="date"]\'); ?>
</div>
</div>
更新:尝试自己在“wp”或“init”操作中处理ajax请求,如中所述
https://wordpress.stackexchange.com/a/53491/19683add_action( \'init\', function() {
wpse_77197_register_shortcode_ajax( \'wpse_77197_auction_price\', \'price_action\' );
} );
function wpse_77197_register_shortcode_ajax( $callable, $action ) {
if ( empty( $_POST[\'action\'] ) || $_POST[\'action\'] != $action )
return;
call_user_func( $callable );
}
function wpse_77197_auction_price(){
echo do_shortcode(\'[wpa_list_widget mode="list" order="price"]\');
die();
}