これを使って自分のフロントページが削除されたりゴミ箱に移動されたりするのを防ぎたいのですが。
add_action( 'wp_trash_post', 'tcb_page_delete_check' );
add_action( 'before_delete_post', 'tcb_page_delete_check' );
function tcb_page_delete_check( $post_id ){
$frontpage = get_option( 'page_on_front');
$blogpage = get_option('page_for_posts');
if( $post_id === $frontpage || $post_id === $blogpage ) {
wp_redirect(admin_url('edit.php?post_type=page'));
exit;
}
}
問題は、「ゴミ箱」をクリックするとoption( 'page_on_front')のIDが7(私の希望するフロントページID)から0に変更されるため、フロントページIDと一致せず、自分のページがゴミ箱に移動されることです。
そして、私がそれを変えるなら:
if( $post_id === 7 ...
ページはゴミ箱に移動されませんが、オプション( 'page_on_front')のIDは0に変更されます。
フロントページが同じままでゴミ箱に捨てられないようにするために、オプション( 'page_on_front')を0に変更しないようにするにはどうすればよいですか。
コードスニペットには2つの問題があります。
最初の問題はこの行にあります:
if( $post_id === $frontpage || $post_id === $blogpage ) {
int
とstring
を厳密に比較しているところです。
両方の変数が同じ型で、同じ値を持つ場合のみ、===
比較はTRUE
を返すことに注意してください。
代わりにこれを試してください:
if( $post_id == $frontpage || $post_id == $blogpage ) {
==
は型変換を実行するか、単に(int)
型キャストを使用します。
if( $post_id === (int) $frontpage || $post_id === (int) $blogpage ) {
intval()
を使うこともできます。
2番目の問題は、コールバック優先順位です。たとえば、デフォルトの1
ではなく優先順位10
を付けて、コールバックを先に実行する必要があります。
add_action( 'wp_trash_post', 'tcb_page_delete_check', 1 );
add_action( 'before_delete_post', 'tcb_page_delete_check', 1 );
お役に立てれば。