是否可以通过电子邮件将现有的帖子状态从“待定”更改为“发布”?

时间:2016-06-15 作者:LegMuscleCramp

我正在构建一个使用自定义表单插件的网站,该插件使我能够使用表单中的数据创建帖子(挂起或发布)。在提交表单后,我希望有一个特定的人员列表,可以收到待审核帖子的电子邮件通知,他们可以通过单击即可批准(将帖子状态更新为“发布”)。有什么想法吗?

目前,我的解决方法是将电子邮件转发到我用于发布的电子邮件地址,但这是一个笨拙的解决方案。

1 个回复
SO网友:brianjohnhanna

步骤1-注册自定义查询变量通过添加自定义查询变量,您可以让WP知道它,以便在请求中使用它。

function wpse_add_query_vars( $vars ) {
    $vars[] = \'wpse_set_to_publish\';
    return $vars;
}
add_filter( \'query_vars\', \'wpse_add_query_vars\' );
步骤2-嗅探请求现在我们连接到parse_request 查找新的自定义查询变量。这是您处理它的地方,它可以变得复杂或简单。例如,为了安全起见,您可以检查是否存在存储为postmeta或transient的令牌。但在最基本的层面上:

function wpse_sniff_request( $query ) {
    if ( ! is_admin() && isset( $query->query_vars[\'wpse_set_to_publish\'] ) ) {
        $post_vars = array(
            \'ID\' => $query->query_vars[\'wpse_set_to_publish\'],
            \'post_status\' => \'publish\'
        );
        wp_update_post( $post_vars );
    }
}
add_action( \'parse_request\', \'wpse_sniff_request\' );
注意:您也可以跳过第一步,在init 钩住而不是截住$_GET[\'wpse_set_to_publish\'] 但这并不完全是“Wordpress方式”

第3步-在电子邮件中提供批准链接最后,假设您正在生成发出的电子邮件,您可以包含以下内容的链接:

echo add_query_arg( array( \'wpse_set_to_publish\' => $post_id ), site_url() );

<注意:您可能会得到$post_id 从返回值wp_insert_post().

然后,一旦用户点击该链接,它应该会将他们带到http://yourwebsite.com/?wpse_set_to_publish=123 这将用ID更新帖子123 具有发布状态。

不幸的是,我现在没有时间对其进行全面测试,但这应该会让您朝着正确的方向前进。同样,这是最基本的实现,您应该始终考虑安全性、权限等。虽然这可能更方便,但从理论上讲,如果您只提供get_edit_post_link() 这将迫使用户登录(如果他们还没有登录),然后他们可以从管理员处向右移动以发布。

相关推荐

Throttling email frequency

我有一个工作委员会网站,运行着wp job manager,通常发送电子邮件的次数很低,但偶尔一个操作会触发数百名收件人的电子邮件更新,以了解列表状态的变化或雇主在申请人列表上的状态变化。我目前通过Dreamhost使用WP Mail SMTP发送。Dreamhost的电子邮件限制为每小时100封。由于这些状态更新和来自该站点的大多数电子邮件都不太需要时间,我正在寻找一种解决方案,即将电子邮件指令排队,每分钟只发送一封电子邮件,和/或计算过去人力资源中发送的数量,当达到某个上限时,延迟队列,然后重新开始。