已多次调用POST过滤器(_P)

时间:2014-03-31 作者:Sumit Gupta

我已经创建了一个端点,以便可以对购物车进行一些结账处理。一切都很好,因为一切都连接好了。虽然我有一个问题,那就是要为我的端点的内容提供服务,但我定义了\\u posts过滤器,如果选择了我的“端点”,那么我会检查其他query\\u变量并进行处理。这对我的两个项目都有效。

然而,在这个项目中,我需要将我的购物车标记为已付款并将其从会话中删除。因此,像往常一样,在我的the\\u posts filter/action函数下,我定义了一个开关并进行处理。但是,当调用该页面时,购物车并没有被标记。我调试后发现,在我的页面上,\\u posts操作函数被调用了三次。第一次调用确实标记并清除了会话,但下一次调用没有找到会话值,因此再次取消标记购物车。

我页面上的三个电话是

wordpress URL重写模块[我猜是这样]中,它试图选择内容或重定向内容?[似乎也是一个main\\u查询]

我有一个自定义的帖子类型作为新闻显示在侧标题中。为此,我创建了一个新的WP\\u查询对象,但它仍按标题中的状态调用该帖子。

  • 我的页面内容在我真正需要它的地方调用。

    我接到另一个电话,是在页脚最近的帖子里。但这对我来说并不重要。

  • 在我的the\\u post方法中,我检查Query\\u var

    global $wp_query, $wpdb, $cardcomm;
    if(isset($wp_query->query_vars[cardcomendpoint]) ) { ... }
    
    由于所有四个调用都将此查询变量设置为true,我不确定如何确保仅为我的目的调用它。有没有办法解决这个问题?

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

    \'the_posts\' 是否启动了操作everytime WP_Query 获取帖子,用于主查询和其他辅助查询,因此当您执行以下操作时:

    $foo = new WP_Query($args);
    
    在小部件或其他地方(短代码、相关帖子…)\'the_posts\' 再次触发。

    但是,只有一个主查询,因此只有当触发操作的查询是主查询时,才可以使用条件并执行操作。

    幸运的是\'the_posts\' 将查询对象传递给挂钩函数,以便检查WP_Query::is_main_query() 方法:

    add_action(\'the_posts\', \'check_my_endpoint\', 10, 2);
    
    function check_my_endpoint( $posts, $wp_query ) {
    
      if ( $wp_query->is_main_query() ) {
    
        global $wpdb, $cardcomm; // no need to globalize $wp_query, we have a reference to it
    
        if( isset( $wp_query->query_vars[cardcomendpoint]) ) { ... }
    
      }
    
    }
    

    结束

    相关推荐

    使用快速编辑更新POST时,POST_ROW_ACTIONS过滤器不工作

    我使用post\\u row\\u操作创建了两个链接,页面加载时显示良好。但使用快速编辑更新帖子后,链接将消失。是WordPress的bug还是我错过了什么。我的代码如下所示。add_filter(\'post_row_actions\', \'add_new_link\', 10, 2); public function add_new_link($actions, $page_object) { $actions[\'new_action\'] = \'<