web-dev-qa-db-fra.com

Ajout d'un lien texte sous le titre de l'article dans les listes d'articles

J'ai apporté beaucoup de modifications à mes paramètres WP et maintenant, lorsque j'approuve et publie des publications en attente, les auteurs disposent d'une heure pour modifier leurs articles. Une fois l'heure écoulée, le lien de montage disparaît et ils ne peuvent plus être modifiés. Je dois leur donner la possibilité de supprimer le message, mais le lien "Corbeille" a également disparu. J'ai pensé ajouter un nouveau lien texte sous le titre de l'article pour permettre aux auteurs de m'envoyer un message demandant de supprimer l'article. Le lien texte doit avoir le nom de la publication en tant que sujet afin de comprendre quelle publication doit être supprimée. Est-ce possible? Merci

1
user27309

Vous pouvez améliorer, modifier les chaînes pour chaque titre de publication dans la vue de tableau de backend sur publication via hook:

add_filter( 'post_row_actions', array( $this, 'add_archive_link' ), 10, 2 );

Voir le résultat dans cette capture d'écran:

enter image description here

Ci-dessous vous trouverez ma méthode pour ajouter un lien

    /**
     * Add link on archive
     *
     * @uses   get_post_type_object, get_archive_post_link, current_user_can, esc_attr
     * @access public
     * @since  0.0.1
     * @param  array string $actions
     * @param  integer $id
     * @return array $actions
     */
    public function add_archive_link( $actions, $id ) {
        global $post, $current_screen, $mode;

        $post_type_object = get_post_type_object( $post->post_type );

        if ( is_array( $this->def_archive_screens ) && ! in_array( $current_screen->id, $this->def_archive_screens ) )
            return $actions;
        if ( ! current_user_can( $post_type_object->cap->delete_post, $post->ID ) )
            return $actions;

        $actions['archive'] = '<a href="' . $this->get_archive_post_link( $post->ID ) 
            . '" title="'
            . esc_attr( __( 'Move this item to the Archive', $this->textdomain  ) ) 
            . '">' . __( 'Archive', $this->textdomain  ) . '</a>';

        return $actions;
    }

Vous devez utiliser le hook admin_action_{your_string} pour le rappel, si l'utilisateur clique sur le lien. Également ci-dessous un exemple pour ma chaîne archive:

    add_action( 'admin_action_archive', array( $this, 'archive_post_type' ) );

Maintenant la méthode pour l'hameçon:

    /**
     * Archive post type
     *
     * @uses   wp_die, set_post_type, add_post_meta, wp_redirect, admin_url
     * @access public
     * @since  0.0.1
     * @return void
     */
    public function archive_post_type () {

        if ( ! (
            isset( $_GET['post']) || 
            ( isset( $_REQUEST['action']) && 'archive' == $_REQUEST['action'] ) 
        ) ) {
            wp_die( __( 'No post to archive has been supplied!', $this->textdomain ) );
        }

        $id = (int) ( isset( $_GET['post']) ? $_GET['post'] : $_REQUEST['post']);

        if ( $id ) {
            $redirect_post_type = '';
            $archived_post_type = get_post_type( $id );
            if ( ! empty( $archived_post_type ) )
                $redirect_post_type = 'post_type=' . $archived_post_type . '&';
            // change post type
            set_post_type( $id, $this->post_type_1 );
            // add old post_type to post meta
            add_post_meta( $id, $this->post_meta_key, $archived_post_type, TRUE );
            wp_redirect( admin_url( 'edit.php?' . $redirect_post_type . 'archived=1&ids=' . $id ) );
            exit;
        } else {
            wp_die( __( 'Sorry, i cant find the post-id', $this->textdomain ) );
        }

    }

Vous trouvez un plugin, utilisez-le sur github .

4
bueltge