web-dev-qa-db-fra.com

Option Supprimer la corbeille/supprimer pour le type de publication personnalisée/la taxonomie

J'ai créé une publication personnalisée de type prj et je dois désactiver l'option de déplacement dans la corbeille pour tout rôle d'utilisateur! Même chose avec une taxonomie org associée au même type de message.

Voici le code que j'ai créé jusqu'à présent .. mais il ne cache que l'option du menu administrateur plutôt que de désactiver la fonctionnalité des rôles d'utilisateur! Ce code masque l’option de la page principale de la liste des publications et empêche les actions de suppression. Le problème est que l’option déplacer vers la corbeille est toujours disponible.

//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

Essayez ces:

/**
 * 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;
} );

Et vous pouvez aussi avoir besoin de ceux-ci:

/**
 * 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