it-swarm.com.de

Benutzerdefinierte Zeilenaktionen

Ich bin beim Schreiben dieser Frage auf diese Frage gestoßen. Ich habe eine Frage, die sich auf diese Frage erstreckt.

Ich habe herausgefunden, dass Sie den get_delete_post_link-Filter verwenden, um eine neue URL für meine Aktionen zu erstellen (oder eine ähnliche Funktion - auf jeden Fall verwende ich diese mit dem Booleschen Wert am Ende). Die einzige Sache ist, ich weiß nicht, wie ich das Ereignis jetzt erfassen soll. Einige Hilfe wäre dankbar, wenn ich nicht viele Beispiele für Post-Row-Aktionen bei Google finde. : - /

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

Und wenn Sie weitere Informationen zu meiner Verwendung benötigen, finden Sie hier weiteren Code:

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

EDIT: Nun, das oben genannte ist nicht vollständig. Mir ist gerade aufgefallen, dass es eigentlich keinen seltsamen Link erzeugt. Vermutlich möchte ich also die Post Row Actions für meinen benutzerdefinierten Post-Typ anpassen, indem Sie anstelle des Links $actions['trash'] den Link "Logout/Login" hinzufügen.

2
Zack

Das Hauptproblem ist, dass $ actions das gesamte Ankertag für den Link akzeptiert und die Funktion get_delete_post_link nur die URL ausgibt.

Wenn Sie also nur das Label "Trash" ersetzen möchten, können Sie den Filter-Hook post_row_actions mit einer einfachen Funktion verwenden

Etwas wie das

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

Dies erzeugt eine Abmeldung, wenn das Meta "IN" ist, und eine Anmeldung, wenn andere Weise aber beide Links den Beitrag löschen. und ich würde einen Scheck hinzufügen, um zu sehen, ob der Beitrag bereits im Papierkorb ist. Aber es ist ein Anfang und ich hoffe, es hilft.

6
Bainternet

Sie können wie unten auf Ihre eigene Funktion verlinken. Ich übergebe einen URL-Parameter zusammen mit der Beitrags-ID. Dann sehe ich, ob dieser Parameter festgelegt ist, und rufe eine darauf basierende Funktion auf. Wenn Sie die Abmelde-URL anstelle der benutzerdefinierten URL verwenden möchten, ersetzen Sie den Anker durch diese ... <a href="<?php echo wp_logout_url( home_url() ); ?>" title="Logout">Logout</a>. Offensichtlich müsstest du dich einloggen, um diesen 'Logout'-Link zu sehen, daher sehe ich keinen Sinn darin, dort einen Login-Link zu setzen!

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

Lassen Sie mich wissen, ob es funktioniert hat!

Danke, Rutwick

0