保存を破棄はアレなので、「公開」できないようにしてみました。
※非公開なら保存できます。
function my_transition_post_status($new_status, $old_status, $post){
if($new_status == 'publish'){
if(特定の条件)
wp_die('公開できませんよ');
}
}
}
add_action('transition_post_status', 'my_transition_post_status', 1, 3);
kzさん、お返事をどうも有り難うございます。
※申し遅れましたが、こちらの環境は、Wordpress2.7.1&Coreserverです。
早速、いただいたCODEを以下のようにアレンジしてfunctions.phpに仕込んでみました。
function my_transition_post_status($new_status, $old_status, $post){
if($new_status == 'publish'){
$count_posts=wp_count_posts()->publish;
if ($count_posts > 10) {
wp_die('Limit Over! ('.$count_posts.')' );
}
}
}
add_action('transition_post_status', 'my_transition_post_status', 1, 3);
この状態で新規に投稿すると、公開済み投稿数が10以上なので、きちんと警告画面が表示されますが、実際には保存&公開がなされてしまっています。
add_actionの優先順位を1で、wp_dieを使っても,その後の処理はなされてしまうのでしょうか?もしくは、アクションは、functions.phpにいれても、保存/公開処理の後に実行されることになってしまうのでしょうか?
コアを理解しないままでの質問で、とんちんかんなことを言っているかもしれません事をお許し下さい。
引き続き、お付き合いいただければ幸いです。
どうぞ宜しく御願いいたします。
$my_post = array();
$my_post['ID'] = $post->ID;
$my_post['post_status'] = 'private';
wp_update_post($my_post);
条件に合致したら非公開に切替えてしまってはどうでしょう?
shokun0803様
お返事をどうも有り難うございます。
wp_die('Limit Over! ('.$count_posts.')' );
のところを
$my_post = array();
$my_post['ID'] = $post->ID;
$my_post['post_status'] = 'private';
wp_update_post($my_post);
wp_die('Limit Over ('.$count_posts.') につき、非公開扱いになります。');
としたところ、”新規投稿⇒公開”でも、”非公開投稿⇒公開”でも、等しく、エラーメッセージが出て、強制非公開扱いとなりました。アドバイスをどうも有り難うございます!
ただ、今更なのですが、このままですと、ページの公開も、強制非公開扱いとなるようになってしまいました。ページの場合には、この判定をスルーするようにするには、どこにどのような分岐を加えれば良いでしょうか。
また、もといになりますが、投稿を強制削除出来るような関数はないのでしょうか。
投稿ルールに反している内容が非公開でもDBに溜まって行くのは、あまり気持ちが良いものではないので。。。
お手隙の際に、もう少しお付き合い頂ければ幸いです。
どうぞ宜しく御願いいたします。
$post->post_type == 'post'
を判定に加えてみてはいかがでしょう。
削除するならwp_delete_postですけどね。
shokun0803様
再び、アドバイスをどうも有り難うございます。
判定部分、処理部分を以下のようにしました。
if ($count_posts > 10 && $post->post_type == 'post') {
wp_delete_post($post->ID);
wp_die('Limit Over! ('.$count_posts.') につき、削除しました。<br />»<a href="'.get_bloginfo('url').'/wp-admin/edit.php">投稿一覧</a>');
}
これで、意図した通りに、条件に合致した投稿のみを強制削除出来るようになりました。また、plugin化しても使える事も確認しました。
こうして作ってみると、wp_dieでエラー画面を表示して投稿リストへのリンクを表示するよりは、投稿編集画面に戻った時に赤枠でエラーメッセージが出る方が親切だなぁと思い、色々調べてみましたが、難しそうだったので今回はパスしようかと。。。
最終的には、強制削除にするか強制非公開にするかは、条件によって分岐したほうが良いなと考えています。(よほど悪質でない限り、強制非公開にとどめる等)
今回も皆さまのアドバイスをどうも有り難うございました。
本当に助かりました!
今後とも宜しくお願い致します。