get_delete_post_link redirecionar

4

Estou usando isso para permitir que os usuários excluam suas próprias postagens no front-end do meu 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>

O problema é que isso atualizou a página atual e adiciona alguns argumentos de consulta à URL (trashed = 1 e ids = 123). O que eu quero que aconteça é que o usuário é redirecionado para uma determinada página com argumentos de consulta específicos, assim:

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

Como posso alterar para onde a função get_delete_post_link redireciona?

    
por Eckstein 02.02.2014 / 19:56

1 resposta

4

Para redirecionar após o uso de get_delete_post_link() é provavelmente mais fácil conectar-se à ação 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;
}

Ou você pode torná-lo dependente da variável $_GET correspondente, conectando-se à ação 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;
    }
}

Note que ambas as soluções irão interceptar no lado do administrador também, então você pode querer adicionar uma verificação para evitar isso.

Para alterar o link retornado por get_delete_post_link() dê uma olhada na fonte, em link-template.php . Lá você verá como o $delete_link é construído. Você pode alterar o retorno da função através do filtro correspondente get_delete_post_link . Dessa forma, você pode fazer com que o link aponte para sua página ou terminal personalizado para exclusão de frontend.

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

De onde você pode cuidar de sua solicitação personalizada de exclusão de postagens. Observe que o código exemplar acima não excluirá nada, se não estou enganado, eu não testei realmente, é apenas um código de prova de conceito, então você precisa se adaptar às suas necessidades.

    
por Nicolai 03.02.2014 / 11:06