web-dev-qa-db-fra.com

get_delete_post_link redirect

J'utilise ceci pour permettre aux utilisateurs de supprimer leurs propres publications sur le front-end de mon site:

<a onclick="return confirm('Move this post to the trash? You can restore it later.');" href="<?php echo get_delete_post_link($postid); ?>">Trash Post</a>

Le problème est que cela a rafraîchi la page actuelle et ajouté des arguments de requête à l'URL (trashed = 1 et ids = 123). Ce que je veux, c'est que l'utilisateur soit redirigé vers une certaine page avec des arguments de requête spécifiques, comme ceci:

mysite.com/yourarticles/?user=123&post=321&action=trash

Comment puis-je changer où la fonction get_delete_post_link redirige?

4
Eckstein

Pour rediriger après l’utilisation de get_delete_post_link() , il est probablement plus facile de s’accroche à l’action trashed_post:

Code:

add_action( 'trashed_post', 'wpse132196_redirect_after_trashing', 10 );
function wpse132196_redirect_after_trashing() {
    wp_redirect( home_url('/your-custom-slug') );
    exit;
}

Vous pouvez également le rendre dépendant de la variable correspondante $_GET en vous connectant à l'action parse_request:

Code:

add_action( 'parse_request', 'wpse132196_redirect_after_trashing_get' );
function wpse132196_redirect_after_trashing_get() {
    if ( array_key_exists( 'trashed', $_GET ) && $_GET['trashed'] == '1' ) {
        wp_redirect( home_url('/your-custom-slug') );
        exit;
    }
}

Notez que les deux solutions intercepteront aussi du côté de l’administrateur, vous voudrez peut-être ajouter une vérification pour éviter cela.

Pour changer le lien renvoyé par get_delete_post_link() , jetez un coup d’oeil à la source, dans link-template.php . Là, vous verrez comment le $delete_link est construit. Vous pouvez modifier le retour de la fonction via le filtre correspondant get_delete_post_link . De cette façon, vous pouvez faire en sorte que le lien pointe vers votre page personnalisée ou votre point de terminaison pour la suppression post-frontale.

Code:

add_filter( 'get_delete_post_link', 'wpse132196_change_delete_post_link', 10, 3 );
function wpse132196_change_delete_post_link(  $id = 0, $deprecated = '', $force_delete = false ) {
    global $post;
    $action = ( $force_delete || !EMPTY_TRASH_DAYS ) ? 'delete' : 'trash';
    $qargs = array(
        'action' => $action,
        'post' => $post->ID,
        'user' => get_current_user_id()
    );
    $delete_link = add_query_arg( $qargs, home_url( sprintf( '/yourarcticles/' ) ) );
    return  wp_nonce_url( $delete_link, "$action-post_{$post->ID}" );
}

À partir de là, vous pouvez vous occuper de traiter votre demande personnalisée de post-suppression. Notez que ci-dessus, un code exemplaire ne supprime rien. Si je ne me trompe pas, je ne l'ai pas encore testé. Il ne s'agit que d'un code de preuve de concept, vous devez donc vous adapter à vos besoins.

4
Nicolai