按日期/价格对WP拍卖进行排序?

时间:2012-12-25 作者:Desi

我正在使用一个名为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." );
        });
      }
    });
  });
});
任何帮助都将不胜感激!

1 个回复
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/19683

add_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();
}

结束

相关推荐

对于在POST中工作的脚本,jQuery inLuclude似乎仍然是必需的

我有一个jQuery脚本,只要我在帖子中包含对jQuery库的引用,它就可以在WordPress帖子中正常工作。<script src=\"http://code.jquery.com/jquery-latest.js\"></script>据我所知,这不是引用jQuery的正确方法,因为它已经包含在WordPress中(使用v3.4.2)。如果删除内联引用,脚本将失败,控制台将显示“$”未定义。根据讨论jQuery中无冲突模式的文章,我还尝试将“$”替换为“jQuery”。可以查