我正在开发一个插件,它将数据存储在自定义表中,并连接到wp_posts
通过邮局的id。然后我使用posts_join
和post_fields
筛选以加入我的表并能够从中检索数据。例如:
add_filter(\'posts_join\', \'my_join\' );
function my_join( $join ){
global $wpdb;
$join .= "LEFT JOIN wp_my_table ON $wpdb->posts.ID = wp_my_table.postID ";
return $join;
}
这在前端(甚至大多数管理员)都很有效,但当一篇文章被编辑时,加入似乎不会发生。例如,在编辑页面上我的插件的自定义元数据库中,
var_dump($post)
显示所有标准字段,但没有我的插件。
编辑帖子时,是否跳过posts_join
, posts_fields
过滤器?有没有其他可以使用的钩子?
<小时>
Update
我做了一些进一步的测试。让我们假设我在上
/邮递php?post=703和;操作=编辑。正如我对克里斯回应的评论一样the_post
hook显示表已在该点成功连接(post为703)。另一方面,有两个调用posts_selection
两者都是针对703的孩子们的修订帖子。(我尝试加入他们的家长,但这不起作用-即使在确保过滤器未被抑制之后)。
当然,我可以在metabox中检索数据,但我想知道是否有可能避免这样做。(点击编辑帖子时会发生什么:D!)
最合适的回答,由SO网友:Stephen Harris 整理而成
嗯,我找到了答案。挖掘柱子。管理中的php,第182行,就在WordPress包含./edit-form-advanced.php
, 我们有;
$post = get_post_to_edit($post_id);
(参见,
here). 如果我们抬头看
get_post_to_edit
, (埋得很深,
see here, 第475行),我们发现
get_post()
检索帖子。
get_post()
按id检索帖子,不提供任何更改查询的方法(尤其是连接其他表)。
get_post
lives here 顺便说一下,第370行)。
这是问题的根源。目前,您不能随帖子返回所有自定义数据-您必须使用帖子的id并再次查询数据库(我知道这没什么大不了的)。