在SAVE_POST挂钩中获取类别

时间:2019-07-01 作者:Ivo Poe

在一个类中,我有一个save\\u post action函数。在这个功能中,我发送一封电子邮件。除了查询该帖子的类别外,所有这些都有效:

class _new_notifications
{
    public function __construct()
    {
        add_action( \'save_post\', array( $this, \'send_new_post_notifications\' ) );

    }

    public function send_new_post_notifications( $post_id ){
        $send_notify = get_field(\'send_notifications\', \'option\');
        if ( !$send_notify || wp_is_post_revision( $post_id ) ) {
            return;
        }

        $categorie = get_the_category( $post_id );
        $cat = $categorie[0]->name;

//doing other stuff...
我已经尝试了所有可能的方法(几个小时:),但我只是没有得到该帖子ID的类别。

也许有人可以。帮助非常感谢!!

2 个回复
SO网友:Faham Shaikh

正如@SallyCJ提到的,您不能使用get_the_category 函数,而您必须使用wp_get_post_terms 如下所示:

class _new_notifications 
{
    public function __construct()
    {
        //Setting up action so that it passes $post object as well, we can also set it to send a third variable defining update/publish status.
        add_action( \'save_post\', array( $this, \'send_new_post_notifications\',10,2 ) );
    }
    public function send_new_post_notifications( $post_id, $data ){
        $send_notify = get_field(\'send_notifications\', \'option\');
        if ( !$send_notify || wp_is_post_revision( $post_id ) ) {
            return;
        }
        $taxonomy = "<YOUR_TAXONOMY_SLUG_HERE>";
        //Updating arguments array to use all the post_category values added while saving the post. The first index in my belief is always containing zero as a value so iterate as you wish.
        $args = array(\'taxonomy\' => \'category\', \'object_ids\' => $data[\'post_category\']);
        //Using get terms because we now know the term ids.
        $categorie = get_terms($args );            
        $cat = $categorie[0]->name;
        //Ideally you should loop through $categoie array and push those value in $cat array but you can proceed from here on with however you wish.

SO网友:Ivo Poe

不幸的是,测试后没有成功:(

我写了以下内容:

if ( get_post_status( $post_id ) === \'publish\' ) {
                $post_title = apply_filters(\'the_title\', get_post_field(\'post_title\', $post_id));
                $post_content = apply_filters(\'the_content\', get_post_field(\'post_content\', $post_id));


                $taxonomy = "category";
                $args = array(\'orderby\' => \'name\', \'order\' => \'ASC\');
                $cat = wp_get_post_terms( $post_id, $taxonomy, $args );
                $categorie = $cat[0]->name;
我在正文输出的wp\\U邮件中获得cat计数-计数为0。有趣的是,当我将分类法更改为CCategory(大C)-我得到一个有错误的数组。(邮件正文中的计数1)

我编写了一个测试函数,它不是在save\\u post hook中运行的,而是通过我自己的调用运行的——在这个函数中,wp\\u get\\u post\\u terms使用相同的post ID工作,没有错误。

An important note yet:

save\\u post函数中有一个检查-我比较get\\u post\\u时间(Unix timetamp)和get\\u modified\\u时间(Unix timestamp)

如果这个比较显示出一个差异-这是帖子的更新吗-差异是0吗?这是一篇新帖子。

当我创建一个新的帖子类别时,它不起作用。当我更新帖子时,该功能适用于该类别

还有其他可能有用的方法吗?(如有必要,我还想把全班同学都张贴在这里)

相关推荐

WP-CLI can't list posts

我有一个WordPress多站点(在防火墙后面)。我在很多方面都使用WP-CLI。但出于某种原因wp post list 不起作用。wp post get 作品但是wp post list 始终产生相同的输出,如下所示:正如您所看到的,这是一个没有数据的表。是否有人有调试此问题的提示?根据要求,我重新格式化了命令(没有任何区别),并添加了--debug。有很多输出!已添加post_type=page: