每当WordPress用户组中的WordPress页面发布/更新时,我都会尝试向该WordPress网站的组成员发送电子邮件、短信和即时消息通知。
我想用动作钩\'save_post\'
是最好的解决方案。然而,我在路上遇到了一些恼人的因素,我相信我已经找到了解决办法。
其中一个恼人的因素是,每次更新页面时,它都会执行两次操作。所以我使用了建议的修复方法here 而且它似乎纠正了双重储蓄问题。如果您对双重储蓄问题有更好的解决方案,我很乐意阅读。
现在,我面临的问题是,我不知道如何正确使用过滤器挂钩\'post_updated_messages\'
与动作钩一致\'save_post\'
. 当我将引用放置到add_filter(\'post_updated_messages\', array(&$this, \'message\'));
在类构造函数中,当我刚刚到达编辑屏幕,甚至还没有单击更新按钮时,它会显示更新的消息。
在与@rarst聊天后,他告诉我\'post_updated_messages\'
过滤器被引用为“位置”,而不是“事件”,这让我想到将引用移动到add_filter(\'post_updated_messages\', array(&$this, \'message\'));
到$this->save_post();
.
将过滤器移动到$this->save_post();
, 现在,我根本看不到显示的自定义更新消息。我只是看到了典型的帖子更新消息。但是,组通知方法仍会激发。
哪里是进行过滤器引用的最佳位置。或者,如果这种情况不需要这个特定的钩子,那么应该使用什么钩子,应该放在哪里?
我将其标记为与插件开发相关,尽管它只是functions.php 此特定活动WordPress主题的文件。
以下是我的大致情况:
<?php
if(!class_exists(\'tester_class\')){
class tester_class{
/**
* Initiate!
*
* @return void
**/
public function __construct() {
add_action(\'save_post\', array(&$this, \'save_post\'));
}
/**
* Display update message
*
* Outputs a message using post_updated_messages, after the WP save_post action
*
* @return void
**/
public function message(){
_e(\'<div class="updated"><p><strong>Post updated & Notified all group members!</strong></p></div>\');
}
/**
* Hooks the WP save_post action
*
* Perform class call after post is saved.
*
* @return void
**/
public function save_post(){
global $flag;
if($flag == 0){
$this->send_group_notifications();
add_filter(\'post_updated_messages\', array(&$this, \'message\'));
}
$flag = 1;
}
/**
* Notifies group members
*
* Sends email, SMS, and IM notifications to all group members.
*
* @return void
**/
public function send_group_notifications(){
// example...
}
}// EoF tester_class class
// Initiate tester_class class
$tester_class = new tester_class();
}// EoF tester_class class_exists
?>
最合适的回答,由SO网友:Brian Fegter 整理而成
Updated:
首先,您需要在notifications方法上返回一个bool值,以便我们可以可靠地为message方法设置一个标记。然后,需要设置$\\u POST数组元素以传递给重定向过滤器。
public function save_post($post_id){
//Add a $_POST key if you syndicated successfully
if($this->send_group_notifications()) //return true from your notification method
$_POST[\'syndicated\'] = true;
}
以下过滤器工作
from your functions.php file. 我无法从插件文件中使其正常工作。基本上,这里要做的是嗅出您在save\\u POST操作中设置的$\\u POST数组元素,并查看是否向重定向添加查询字符串变量。
add_filter(\'redirect_post_location\', \'update_post_redirect\');
function update_post_redirect($location){
$syndicated = isset($_POST[\'syndicated\']) ? $_POST[\'syndicated\'] : 0;
if($syndicated == true)
$location .= \'&syndicated=1\';
return $location;
}
最后,我们嗅出$\\u GET变量,以便确定是否需要显示消息。
public function message($messages){
$syndicated = isset($_GET[\'syndicated\']);
if($syndicated)
//Do something with the messages array here.
return $messages;
}
查看这篇文章,了解如何使用此过滤器的一个很好的示例:
Set custom messages for post update/save希望这对你有帮助!