我想使用以下方法防止删除我的frontpage/将其移动到垃圾箱:
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;
}
}
问题是,当我单击“垃圾箱”时,选项(“page\\u on\\u front”)的ID get从7(这是我想要的frontpage ID)更改为0,因此它与frontpage ID从不匹配,并将我的页面移动到垃圾箱。
如果我将其更改为:
if( $post_id === 7 ...
页面不会移动到垃圾箱,但选项(“page\\u on\\u front”)的ID更改为0。
如何防止选项(“page\\u on\\u front”)更改为0,以便我的frontpage保持不变,不会被丢弃?
最合适的回答,由SO网友:birgire 整理而成
您的代码段有两个问题:
1) 比较第一个问题是:
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 );
希望这有帮助。