Acciones de fila de publicación personalizadas

2

Me encontré con esta pregunta mientras escribía esta pregunta. Tengo una pregunta que se extiende sobre esa pregunta.

Descubrí que utilizas el filtro get_delete_post_link para crear una nueva URL para mis acciones (o una función similar: en cualquier caso, estoy usando esa con el valor booleano al final). Lo único es que no sé cómo capturar el evento ahora. Se agradecería algo de ayuda, ya que no puedo encontrar muchos ejemplos de acciones de fila de publicaciones en Google. : - /

public function _wp_filter_get_delete_post_link( $post_id, $deprecated, $force_delete = false )
{
    if ( ! empty( $deprecated ) )
    {
        _deprecated_argument( __FUNCTION__, '3.0.0' );
    }

    $post = &get_post( $post_id );      
    if ( ! $post ) return;

    if ( strcmp($post->post_type, "visitor") ) return;

    $post_type_object = get_post_type_object( $post->post_type );
    if ( !$post_type_object ) return;
    if ( !current_user_can( $post_type_object->cap->delete_post, $post->ID ) ) return;
    // http://localhost/wordpress/wp-admin/post.php?post=163&action=trash&_wpnonce=a56abdcbb3

    $action = ( $force_delete ? 'logout' : 'login' );

    $delete_link = add_query_arg( 'action', $action, admin_url( sprintf( $post_type_object->_edit_link, $post->ID ) ) );

    return wp_nonce_url( $delete_link, "$action-{$post->post_type}_{$post->ID}" );
}

Y, si necesitas más información sobre cómo la estoy usando, aquí tienes un código más:

public function _wp_post_row_actions( $actions, $post )
{
    if ( $post->post_type == 'visitor' )
    {
        //unset( $actions['edit'] );
        unset( $actions['inline hide-if-no-js'] );
        unset( $actions['trash'] );
        unset( $actions['view'] );

        $state = get_post_meta( $post->ID, 'v_state', true ) === 'in';

        if ( $state )
        {
            $actions['trash'] = get_delete_post_link( $post->ID, '', true );    // Logout
            // get_delete_post_link
        }
        else
        {
            $actions['trash'] = get_delete_post_link( $post->ID );  // Login
        }
    }

    return $actions;
}

EDITAR: Bueno, lo anterior no está completo. Acabo de darme cuenta de que en realidad no genera un enlace que es raro. Supongo que lo que pido es una forma de personalizar las Acciones de la fila de publicaciones para mi tipo de publicación personalizada agregando un enlace "Cerrar sesión / Iniciar sesión" en lugar del enlace $actions['trash'] .

    
pregunta Zack 03.02.2011 - 22:48

2 respuestas

6

El problema principal es que $ actions acepta la etiqueta de ancla completa para el enlace y la función get_delete_post_link solo genera la url.

Por lo tanto, si solo está buscando reemplazar la etiqueta "Papelera", puede utilizar el gancho de filtro post_row_actions con una función simple

Algo como esto

    add_filter('post_row_actions','my_action_row')

    function my_action_row(){
       if ($post->post_type =="visitor"){
          //remove what you don't need
           unset( $actions['inline hide-if-no-js'] );
           unset( $actions['trash'] );
           unset( $actions['view'] );
           //check capabilites
           $post_type_object = get_post_type_object( $post->post_type );
           if ( !$post_type_object ) return;
           if ( !current_user_can( $post_type_object->cap->delete_post, $post->ID ) ) return;

          //the get the meta and check
           $state = get_post_meta( $post->ID, 'v_state', true );
           if ($state == 'in'){
             $actions['trash'] = "<a class='submitdelete' title='" . esc_attr(__('Delete this item permanently')) . "' href='" . get_delete_post_link($post->ID, '', true) . "'>" . __('Logout') . "</a>";
           }else{
             $actions['trash'] = "<a class='submitdelete' title='" . esc_attr(__('Delete this item permanently')) . "' href='" . get_delete_post_link($post->ID, '', true) . "'>" . __('Login') . "</a>";


           }
       }
       return $actions;
    }

Esto generará un cierre de sesión si el meta es "IN" e inicia sesión si no es así, pero ambos enlaces eliminarán la publicación. y agregaría un cheque para ver si la publicación ya está en la papelera. Pero es un comienzo y espero que ayude.

    
respondido por el Bainternet 04.02.2011 - 00:28
0

Puede vincular a su propia función como a continuación. Estoy pasando un parámetro url junto con el ID de publicación, luego veo si ese parámetro está establecido y llamo a una función basada en eso. Si desea que la url de cierre de sesión en lugar de la url personalizada, intente reemplazar el ancla con esto ... %código%. Obviamente, tendrías que iniciar sesión para ver ese enlace de 'cierre de sesión', ¡por lo tanto, no veo ningún punto en poner un enlace de inicio de sesión allí!

add_action('post_row_actions', 'testing');
function testing( $actions, $post )
{
if ( $post->post_type == 'visitor' )
{
    //unset( $actions['edit'] );
    unset( $actions['inline hide-if-no-js'] );
    unset( $actions['trash'] );
    unset( $actions['view'] );

    //Adding a custom link and passing the post id with it
    $actions['customedit'] = '<a href=\''.admin_url('?action=test&post='.$post->ID).'\' target=\'blank\'>Test</a>';
}
return $actions;
}

//Now to get the 'test' argument, and triggering a function based on it...

if($_GET['action'] == 'test')
{
$post_to_print = $_GET['post'];
print_post($post_to_print);
}

function print_post($id)
{
$my_post = get_post($id);

echo "<pre>";
print_r($my_post);
echo "</pre>";
}

Hazme saber si funcionó!

Gracias, Rutwick

    
respondido por el Rutwick Gangurde 18.04.2011 - 07:02

Lea otras preguntas en las etiquetas