如何在wp_ins_post中插入自定义函数

时间:2013-07-08 作者:Jayyrus

我试图在wordpress管理员插入新帖子时发送推送通知。

我花了好几个小时在哪里添加我的函数,在做了很多之后,我找到了核心函数wp_insert_post 在…内wp-includes/post.php

该函数返回Post\\u ID,因此我在返回之前添加了自定义脚本:

include \'../push/send_message.php\';
sendNotification($postarr[\'post_title\'],$postarr[\'guid\']);
问题是当我在这里导入这两行时

function wp_insert_post($postarr, $wp_error = false) {
    ...
    if ( $update ) {
        do_action(\'edit_post\', $post_ID, $post);
        $post_after = get_post($post_ID);
        do_action( \'post_updated\', $post_ID, $post_after, $post_before);
    }
    do_action(\'save_post\', $post_ID, $post);
    do_action(\'wp_insert_post\', $post_ID, $post);
    include \'../push/send_message.php\';
    sendNotification($postarr[\'post_title\'],$postarr[\'guid\']);
    return $post_ID;
}
没有发生任何事情,当管理员插入新帖子时,成功页面为空。如果我去掉那条线,一切都好。。非常奇怪。。有人能给我一个正确的方法来做我需要的事情吗?

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

看到你发布的黑客核心代码中的这两个钩子了吗?

do_action(\'save_post\', $post_ID, $post);
do_action(\'wp_insert_post\', $post_ID, $post);
这些是你需要用来做这件事的权利。

function run_on_update_post($post_ID, $post) {
    var_dump($post_ID, $post); // debug
    include \'../push/send_message.php\';
    sendNotification($post[\'post_title\'],$post[\'guid\']);
    return $post_ID;

}
add_action(\'save_post\', \'run_on_update_post\', 1, 2);
save_post 每次保存帖子时运行。我不能保证你的功能会正常工作,但你应该能够修改一些东西使其正常工作。看看var_dump 并相应更改。这个includes也可能不起作用,因为它们是相对路径。你可能也必须改变这一点。

SO网友:brasofilo

修改核心文件是不可能的。这个Plugin API 提供执行此类操作所需的连接。您正在修改的函数有很多hooks 可获得的另请参见:Actions and filters are NOT the same thing….

解决方案是创建自己的插件*

<?php
/* Plugin name: My first plugin */

add_action( \'wp_insert_post\', \'callback_so_17530930\', 10, 2 );

function callback_so_17530930( $post_ID, $post )
{
    // Adjust for the desired Post Type
    if( \'page\' !== $post->post_type )
        return;

    include \'../push/send_message.php\';
    sendNotification( $post->post_title, $post->guid );
}
<支持>*请参见Where do I put the code snippets I found here or somewhere else on the web?

只需将插件PHP文件放入wp-content/plugins 文件夹转到仪表板插件页面并激活。更多详细信息,请访问the Codex.

结束

相关推荐