web-dev-qa-db-ja.com

カスタム投稿タイプ/分類法の[ごみ箱]オプションを削除

カスタム投稿タイプ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.');
    }
}
1
Hassan Alvi

これらを試してください:

/**
 * 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;
}
2
Sally CJ