私はカスタムフォームプラグインを使用するWebサイトを構築しています、そしてプラグインは私にフォームからのデータを使用して投稿(保留中または公開)を作成する能力を与えてくれます。フォームを送信すると、レビュー待ちの投稿の電子メール通知を特定の人のリストに送信して、ワンクリックで承認(投稿ステータスを「公開」に更新)できるようにします。何か案は?
現在のところ、私の回避策は、投稿に使用しているメールアドレスにメールを転送することですが、それは不格好な解決策です。
カスタムクエリvarを追加することで、WPにそれを認識させるので、リクエストで使用できます。
function wpse_add_query_vars( $vars ) {
$vars[] = 'wpse_set_to_publish';
return $vars;
}
add_filter( 'query_vars', 'wpse_add_query_vars' );
今度は新しいカスタムクエリvarを探すために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' );
注:ステップ1を飛ばしてinit
フックでこのステップを実行し、代わりに$_GET['wpse_set_to_publish']
をインターセプトすることもできますが、これは厳密には "Wordpressのやり方"ではありません
最後に、あなたが出て行く電子メールを生成していると仮定すると、これらの行に沿って何かを含むリンクを含めることができます。
echo add_query_arg( array( 'wpse_set_to_publish' => $post_id ), site_url() );
注:おそらく、wp_insert_post()
の戻り値から$post_id
を取得することになります。
その後、そのリンクをクリックすると、http://yourwebsite.com/?wpse_set_to_publish=123
に移動します。これにより、投稿のステータスが123
に更新され、公開のステータスになります。
残念ながら、今これを完全にテストする時間はありませんが、これで正しい方向に進むことができます。繰り返しますが、これは最も基本的な実装であり、常にセキュリティ、アクセス許可などを考慮する必要があります。これはより便利かもしれませんが、理論的にははるかに安全です。 get_edit_post_link()
へのリンクを提供すると、ユーザーは強制的にログインすることになります(まだログインしていない場合)。 。