カスタム投稿タイプprj
を作成しました。どのユーザーロールでもゴミ箱へ移動オプションを無効にする必要があります。同じ投稿タイプに関連付けられたorg
という分類法も同じです。
これは私がこれまでに思いついたコードです。このコードはメインの投稿リストページからオプションを隠し、削除アクションを防ぎます。問題はゴミ箱へ移動するオプションがまだ利用できるということです
//Disabling Trash Option for Project
add_filter( 'post_row_actions', 'remove_row_actions_post', 10, 1 );
function remove_row_actions_post( $actions ) {
if( get_post_type() === 'prj' ) {
unset( $actions['clone'] );
unset( $actions['trash'] );
return $actions;
}
}
add_action('wp_trash_post', 'restrict_post_deletion', 10, 1);
add_action('before_delete_post', 'restrict_post_deletion', 10, 1);
function restrict_post_deletion($post_id) {
if( get_post_type($post_id) === 'prj' ) {
wp_die('The post you were trying to delete is protected.');
}
}
これらを試してください:
/**
* Removes the "Trash" link on the individual post's "actions" row on the posts
* edit page.
*/
add_filter( 'post_row_actions', 'remove_row_actions_post', 10, 2 );
function remove_row_actions_post( $actions, $post ) {
if( $post->post_type === 'prj' ) {
unset( $actions['clone'] );
unset( $actions['trash'] );
}
return $actions;
}
add_action('wp_trash_post', 'restrict_post_deletion');
function restrict_post_deletion($post_id) {
if( get_post_type($post_id) === 'prj' ) {
wp_die('The post you were trying to delete is protected.');
}
}
/**
* Removes the "Delete" link on the individual term's "actions" row on the terms
* edit page.
*/
add_filter( 'tag_row_actions', 'remove_row_actions_term', 10, 2 );
function remove_row_actions_term( $actions, $term ) {
if ( 'org' === $term->taxonomy ) {
unset( $actions['delete'] );
}
return $actions;
}
add_action( 'pre_delete_term', 'restrict_taxonomy_deletion', 10, 2 );
function restrict_taxonomy_deletion( $term, $taxonomy ) {
if ( 'org' === $taxonomy ) {
wp_die( 'The taxonomy you were trying to delete is protected.' );
}
}
add_action( 'admin_head', function () {
$current_screen = get_current_screen();
// Hides the "Move to Trash" link on the post edit page.
if ( 'post' === $current_screen->base &&
'prj' === $current_screen->post_type ) :
?>
<style>#delete-action { display: none; }</style>
<?php
endif;
// Hides the "Delete" link on the term edit page.
if ( 'term' === $current_screen->base &&
'org' === $current_screen->taxonomy ) :
?>
<style>#delete-link { display: none; }</style>
<?php
endif;
} );
そしてまたあなたはこれらを必要とするかもしれません:
/**
* If you want/need to programmatically trash a 'prj' post, use this function
* instead of directly calling the wp_trash_post() function.
*/
function my_trash_prj_post( $post_id = 0 ) {
// Removes the filter THE SAME WAY it was added.
remove_action('wp_trash_post', 'restrict_post_deletion');
// Now trash the post.
$post = wp_trash_post( $post_id );
// Re-add the filter.
add_action('wp_trash_post', 'restrict_post_deletion');
return $post;
}
/**
* If you want/need to programmatically trash a 'org' term, use this function
* instead of directly calling the wp_delete_term() function.
*/
function my_delete_org_term( $term, $taxonomy = 'org', $args = array() ) {
// Removes the filter THE SAME WAY it was added.
remove_action( 'pre_delete_term', 'restrict_taxonomy_deletion', 10, 2 );
// Now delete the term.
$status = wp_delete_term( $term, $taxonomy, $args );
// Re-add the filter.
add_action( 'pre_delete_term', 'restrict_taxonomy_deletion', 10, 2 );
return $status;
}