这是我第一次尝试编写动作挂钩。
我的CPT有4个类别。我试图使WP在类别更改时自动发送电子邮件通知。
我所说的改变是指:假设这篇文章属于“cat1”类。管理员取消选择cat1并选择“cat2”,然后单击“更新”按钮。我不是说在列表中覆盖或附加新类别。
迄今为止我的代码:
add_action(\'set_object_terms\',\'email_when_category_changes\');
function email_when_category_changes(){
wp_mail( \'[email protected]\', \'Update on CI board\', \'the category changed\' );
}
这里的想法是,作者将收到一封电子邮件,通知他们他们的帖子已从cat1改为cat2。
上述代码的工作原理是,当我单击“更新”时,它会发送一封电子邮件。然而,问题是无论我做什么,它都会发送一封电子邮件。每当我单击“更新”,无论是否有任何更改,它都会发送电子邮件。
我认为set\\u object\\u术语只有在类别更改时才会触发。很明显,我遗漏了一个重要的概念。有人能帮忙吗?
SO网友:TheDeadMedic
使用挂钩added_term_relationship
和deleted_term_relationships
. 这些只有在关系发生变化时才会触发,而不是set_object_terms
始终会触发:
function wpse_181090_object_terms_updated( $object_id ) {
static $did = array(); // This function might fire multiple times for the same object, ensure it only runs once
if ( ! isset( $did[ $object_id ] ) ) {
$did[ $object_id ] = true;
// Your notification code
}
}
add_action( \'deleted_term_relationships\', \'wpse_181090_object_terms_updated\' );
add_action( \'added_term_relationship\', \'wpse_181090_object_terms_updated\' );