get_delete_post_link redirect

4

Estoy usando esto para permitir a los usuarios eliminar sus propias publicaciones en la parte delantera de mi sitio:

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

El problema es que esto actualizó la página actual y agrega algunos argumentos de consulta a la URL (trashed = 1 and ids = 123). Lo que quiero que suceda es que el usuario sea redirigido a una página determinada con argumentos de consulta específicos, como por ejemplo:

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

¿Cómo puedo cambiar a dónde redirige la función get_delete_post_link?

    
pregunta Eckstein 02.02.2014 - 19:56

1 respuesta

4

Para redirigir después del uso de get_delete_post_link() probablemente sea más fácil engancharlo en la acción trashed_post :

Código:

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

O puedes hacerlo dependiente de la variable $_GET correspondiente al enganchar en la acción parse_request :

Código:

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;
    }
}

Tenga en cuenta que ambas soluciones también se interceptarán en el lado del administrador, por lo que es posible que desee agregar una verificación para evitarlo.

Para cambiar el enlace devuelto por get_delete_post_link() , consulte la fuente en link-template.php . Allí verás cómo se construye el $delete_link . Puede modificar el retorno de la función a través del filtro correspondiente get_delete_post_link . De esta manera, puede hacer que el enlace apunte a su página personalizada o punto final para la eliminación posterior de la interfaz.

Código:

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}" );
}

Desde donde puede encargarse del manejo de su solicitud de eliminación personalizada posterior. Tenga en cuenta que el código de ejemplo anterior no eliminará nada; si no me equivoco, no lo he probado, es solo una prueba de código de concepto, por lo que debe adaptarse a sus necesidades.

    
respondido por el Nicolai 03.02.2014 - 11:06

Lea otras preguntas en las etiquetas