Frage

Ich stieß auf diese Frage Während des Schreibens dieser Frage. Ich habe eine Frage, die sich auf diese Frage erstreckt.

Ich habe herausgefunden, dass Sie das verwenden get_delete_post_link Filter, um eine neue URL für meine Aktionen (oder eine ähnliche Funktion zu erstellen - in jedem Fall verwende ich diese am Ende mit dem Booleschen). Das einzige ist, ist, Ich weiß jetzt nicht, wie ich das Ereignis erfassen soll. Einige Hilfe wäre geschätzt, wenn man bedenkt, dass ich bei Google nicht viele Beispiele für Post -Zeilen -Aktionen finden würde. :-//

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 darüber benötigen, wie ich es verwende, finden Sie hier ein weiterer 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;
}

BEARBEITEN: Nun, das obige ist nicht vollständig. Ich habe gerade bemerkt, dass es nicht wirklich einen Link erzeugt, was seltsam ist. Ich denke, ich frage also eine Möglichkeit, die Post -Zeilen -Aktionen für meinen benutzerdefinierten Beitragstyp anzupassen, indem ich anstelle des $actions['trash'] Verknüpfung.

War es hilfreich?

Lösung

Das Hauptproblem ist, dass $ Actions das gesamte Anker -Tag für den Link akzeptiert und die Funktion get_delete_post_link nur die URL ausgibt.

Wenn Sie also nur den Etikett "Müll" ersetzen möchten, können Sie den Filterhaken 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 ein Abmelden, wenn das Meta "in" "in" ist, und melden Sie sich an, wenn andere weise, aber beide Links den Beitrag löschen. Und ich würde einen Scheck hinzufügen, um zu sehen, ob sich der Beitrag bereits im Müll befindet. Aber es ist ein Anfang und ich hoffe es hilft.

Andere Tipps

Sie können wie unten auf Ihre eigene Funktion verlinken. Ich übertrage einen URL -Parameter zusammen mit der Post -ID, dann sehe ich, ob dieser Parameter festgelegt ist, und rufe eine Funktion auf, die basierend darauf aufruft. Wenn Sie die Abmelde -URL anstelle der benutzerdefinierten URL möchten, versuchen Sie den Anker durch ...<a href="<?php echo wp_logout_url( home_url() ); ?>" title="Logout">Logout</a>. Offensichtlich müssten Sie sich anmelden, um diesen "Abmeldung" -Link zu sehen, daher sehe ich keinen Punkt 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

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit wordpress.stackexchange
scroll top