it-swarm.com.de

Ändere die users.php-Seite, um eine Seite/einen Beitrag zu erstellen, wenn auf die Schaltfläche geklickt wird

Ich versuche eine neue Spalte in users.php (Wordpress Users Page) mit Buttons zu erstellen.

Jede Schaltfläche, die dem Benutzer zugeordnet ist, muss eine Seite oder einen Beitrag erstellen (basierend auf meiner programmgesteuerten Auswahl).

Ich habe einige Probleme beim Aufrufen der Funktion zum Erstellen der Seite/des Posts aus der Klasse heraus.

Hier ist ein Beispielcode, mit dem ich spiele:

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' );

Ich bin seit drei Tagen mit diesem Problem konfrontiert und brauche eine große Hand.

Danke im Voraus.

1
Mark

Verwenden Sie wp-admin/admin.php mit einem action-Parameter:

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

Und dann nimm an der Veranstaltung teil:

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' );

Sie können der Funktion einen beliebigen Namen geben. Wichtig ist, dass der Hook dem Wert Ihres Parameters action mit dem Suffix admin_action_ entspricht.

2
TheDeadMedic