我已经创建了一个端点,以便可以对购物车进行一些结账处理。一切都很好,因为一切都连接好了。虽然我有一个问题,那就是要为我的端点的内容提供服务,但我定义了\\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,我不确定如何确保仅为我的目的调用它。有没有办法解决这个问题?
最合适的回答,由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]) ) { ... }
}
}