连接在帖子编辑器页面中不起作用的表

时间:2011-11-03 作者:Stephen Harris

我正在开发一个插件,它将数据存储在自定义表中,并连接到wp_posts 通过邮局的id。然后我使用posts_joinpost_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!)

2 个回复
最合适的回答,由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并再次查询数据库(我知道这没什么大不了的)。

SO网友:Chris_O

管理中最简单的方法是使用post对象中的post\\u id进行第二次自定义查询。

function custom_posts_data( $posts, $query ) {
       global $wpdb;  
       if ( !count( $posts ) ) 
           return $posts;  

       while ( $posts as $post ) {        
           $query = "SELECT * FROM {$wpdb->prefix}my_plugin_table WHERE post_id={$post->ID}";
           $results = $wpdb->get_results( $query );
       }
       return $posts;
   }
   add_filter( \'the_posts\', \'custom_posts_data\' );
如果需要进行完全联接,请查看scibu\'s sortable columns exampleMitcho\'s orderby joins filter examples.

结束

相关推荐

hooks & filters and variables

我是updating the codex page example for action hooks, 在游戏中完成一些可重用的功能(最初是针对这里的一些Q@WA)。但后来我遇到了一个以前没有意识到的问题:在挂接到一个函数以修改变量的输出后,我再也无法决定是要回显输出还是只返回它。The Problem: 我可以修改传递给do_action 用回调函数钩住。使用变量修改/添加的所有内容仅在回调函数中可用,但在do_action 在原始函数内部调用。很高兴:我将其修改为一个工作示例,因此您可以将其复制/粘贴