web-dev-qa-db-fra.com

Modifier la page users.php pour créer une page/publier sur un bouton cliqué

J'essaie de créer une nouvelle colonne dans users.php (page des utilisateurs de Wordpress) avec des boutons.

Chaque bouton, associé à l'utilisateur, doit créer une page ou une publication (en fonction de ma sélection par programme).

J'ai un problème sur la façon d'appeler la fonction pour créer la page/publication à partir de l'intérieur de la classe.

Voici quelques exemples de code avec lesquels je joue:

class Create_Pages_On_User_Click {

    ..............
    ..............
    ..............

    public function actions() {

        add_filter('manage_users_columns',  array( $this, 'hn_create_associated_page_column'));
        add_action('manage_users_custom_column', array( $this, 'hn_create_custom_pages_content'), 10, 3);

    }

    // Add Create Page Column
    public function hn_create_associated_page_column($columns) {
        $columns['create_page_associated'] = 'Page Associated Action';
        return $columns;
    }

    public function hn_create_custom_pages_content($value, $column_name, $user_id) {
        $postID_link = get_user_meta( $user_id, 'wp_ure_posts_list', true );

        if ( 'create_page_associated' == $column_name ) {
            if ($postID_link != null) {
                return '<button type="submit" class="btn btn-btn-warning" disabled>Page Created</button>';
            } else {
                $my_personal_page_name = get_user_meta( $user_id, 'wp_s2member_custom_fields', true);
                $name_of_the_personal_page = @$my_personal_page_name['personal_page_name'];

                //return "<a class='button button-primary' id='submitCreatePages' style='margin:0.25em 0' href='{$_SERVER["REQUEST_URI"]}?create_page.php&userID={$user_id}&lb_name={$name_of_the_personal_page}'>Create Page</a>";

                // Call programmatically_create_post() on click and pass $postID_link and $name_of_the_personal_page
                return '<input id="submitCreatePages" type="submit" value="Create" class="btn btn-warning" name="action" />';   

            }
        }
        return $value;
    }

}

function programmatically_create_post() {

    // Initialize the page ID to -1. This indicates no action has been taken.
    $post_id = -1;

    // Setup the author, slug, and title for the post
    $author_id = 1;
    $slug = 'example-post';
    $title = 'My Example Post';

    // If the page doesn't already exist, then create it
    if( null == get_page_by_title( $title ) ) {

        // Set the post ID so that we know the post was created successfully
        $post_id = wp_insert_post(
            array(
                'comment_status'    =>  'closed',
                'ping_status'       =>  'closed',
                'post_author'       =>  $author_id,
                'post_name'         =>  $slug,
                'post_title'        =>  $title,
                'post_status'       =>  'publish',
                'post_type'         =>  'post'
            )
        );

        die();

    // Otherwise, we'll stop
    } else {

            // Arbitrarily use -2 to indicate that the page with the title already exists
            $post_id = -2;

    } // end if

} // end programmatically_create_post
add_filter( 'after_setup_theme', 'programmatically_create_post' );

Je suis bloqué sur ce problème depuis trois jours et j'ai besoin d'une grosse main.

Merci d'avance.

1
Mark

Utilisez wp-admin/admin.php avec un paramètre action:

<a href="<?php echo esc_url( admin_url( "admin.php?action=wpse_184153_create_page&user_id=$user_id" ) ) ?>">Create Page</a>

Et puis accrochez-vous à l'événement:

function wpse_184153_create_page() {
    $redirect = admin_url( 'users.php' );

    if ( ! empty( $_GET['user_id'] ) && $user = get_userdata( ( int ) $_GET['user_id'] ) ) {
        // Create your page

        // Add any URL parameters you need for the return page
        $redirect = add_query_arg( 'created_page', $user->ID, $redirect );
    }

    // Send 'em back to users.php
    wp_redirect( $redirect );
    exit;
}

add_action( 'admin_action_wpse_184153_create_page', 'wpse_184153_create_page' );

Vous pouvez nommer la fonction comme bon vous semble. Le point clé à noter est la manière dont le crochet correspond à la valeur de votre paramètre action, avec le suffixe admin_action_.

2
TheDeadMedic