POST编辑时的奇数map_meta_Cap$args--有时为整型,有时为字符串

时间:2015-11-27 作者:C C

我一直在深入研究map\\u meta\\u cap过滤器,因为我需要在某些情况下根据上下文扩展用户的功能。这很好,但在我的跟踪中,我注意到$args在回调函数中显示的方式有些奇怪。这是我的筛选器注册(在类中):

add_filter( \'map_meta_cap\', array(&$this, \'post_map_meta_cap\'), 10, 4 );
下面是它附带的回调函数定义:

public function post_map_meta_cap( $caps, $cap, $user_id, $args ) {
    error_log("Filter fired:  ------>  meta_cap args:  " . json_encode($args));
}
现在,我在管理页面上,显示了列出的所有自定义帖子类型,并将单击其中一篇帖子的“编辑”(id号6)。以下是跟踪:

on page: edit.php?post_type=my_custom_post_type
click on edit post id 6
Filter fired:  map_meta_cap:  ------>  meta_cap args:  [6]
Filter fired:  admin_enqueue_scripts
Filter fired:  admin_head
Filter fired:  in_admin_header
Filter fired:  admin_bar_menu
Filter fired:  wp_before_admin_bar_render
Filter fired:  wp_after_admin_bar_render
Filter fired:  map_meta_cap:  ------>  meta_cap args:  ["6"]
Filter fired:  in_admin_footer
Filter fired:  admin_footer_text
Filter fired:  admin_footer
Filter fired:  admin_print_footer_scripts
on page:  post.php?post=6&action=edit
我正在用以下内容编写$args的值:

json_encode($args)
这是一种快速/简单的方法,可以让任何对象在跟踪/日志中可读。

所以,我发现奇怪的是,正如您第一次启动过滤器时所看到的,$args数组有一个元素,它是integer, 第二次激发时,该数组有一个元素,并且是string, “6”。

为了安全起见,我将结果转换为整数,现在我看到了这一点,但我想知道它为什么会这样做?我们是否希望post id有时是整数,有时是字符串?

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

这个map_meta_cap 函数一般处理上下文参数-您可以给它任何东西,它会很高兴地将其传递给整个链。只有特定的功能edit_post 这要求参数是一个整数,但即使这样,也要由调用者传递一个合适的值。

这里是您获取字符串/整数mashup的地方-通常调用方会直接从WP_Post 对象,但它可以来自任何地方-另一个数据库调用,另一个具有post ID引用的对象,硬编码等。换句话说,字符串有很多机会通过。

你可以试试debug_backtrace 在你的测试中找到罪魁祸首,但生活中还有更重要的事情要做——坚持你的int类型转换并继续编码;)

相关推荐

About Hooks and Filters

嗯,我很难理解动作和过滤器之间的区别。我确实在代码中使用动作,但我是一个新手,甚至连一点过滤器都不知道。我去过codex,以及NickTheGeek、BillErickson、GaryJones等的多个网站,但没有去过vein。如果你能用简单的话告诉我,并举例说明动作、过滤器和挂钩的基本内容和区别。非常感谢。