web-dev-qa-db-fra.com

Actions de ligne de post personnalisé

Je suis tombé sur cette question en écrivant cette question. J'ai une question qui s'étend à cette question.

J'ai pensé que vous utilisiez le filtre get_delete_post_link pour créer une nouvelle URL pour mes actions (ou une fonction similaire - Dans tous les cas, je l'utilise avec le booléen à la fin). La seule chose est, Je ne sais pas comment capturer l'événement maintenant. Une aide serait appréciée étant donné que je ne trouve pas de nombreux exemples d’actions post-ligne sur 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}" );
}

Et, si vous avez besoin d'informations supplémentaires sur la manière dont je les utilise, voici un peu plus de 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: Eh bien, ce qui précède n'est pas complet. Je viens de remarquer que cela ne génère pas réellement un lien qui est bizarre. Je suppose donc que je demande un moyen de personnaliser les actions de publication de ligne pour mon type de publication personnalisé en ajoutant un lien "Déconnexion/Connexion" à la place du lien $actions['trash'].

2
Zack

Le problème principal est que $ actions accepte la totalité de la balise d'ancrage pour le lien et que la fonction get_delete_post_link affiche uniquement l'URL.

Donc, si vous cherchez seulement à remplacer le libellé "Corbeille", vous pouvez utiliser le crochet de filtrage post_row_actions avec une simple fonction

Quelque chose comme ça

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

Cela générera une déconnexion si la méta est "IN" et une autre connexion mais les deux liens supprimeront le message. et j'ajouterais un chèque pour voir si le message est déjà à la poubelle. Mais c'est un début et j'espère que cela aide.

6
Bainternet

Vous pouvez créer un lien vers votre propre fonction comme ci-dessous. Je passe un paramètre url avec le post id, puis je vois si ce paramètre est défini et j'appelle une fonction en fonction de cela. Si vous souhaitez que l'URL de déconnexion soit remplacée par l'URL personnalisée, essayez de remplacer l'ancre par cette ... <a href="<?php echo wp_logout_url( home_url() ); ?>" title="Logout">Logout</a>. Évidemment, vous devez vous connecter pour voir ce lien de "déconnexion", donc je ne vois pas l'intérêt de mettre un lien de connexion là-bas!

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

Faites-moi savoir si cela a fonctionné!

Merci Rutwick

0
Rutwick Gangurde