osakagreg
osakagreg

Reputation: 577

Using $_GET within PHP class is returning NULL

I'm trying to retrieve a query string within a PHP class file, but it always comes up empty.

I have also tried storing $cur_tab as a global, but anytime I use it within PHP class it is empty. It works in other files.

What is different about a class file that I don't understand?

The full URL is similar to:

domain.com/blog/groups/testes-mctestersons/?tab=rejected

I don't see any output for var_dump($_GET);

class Groups_Requests extends \um\core\Member_Directory {


/**
 * @var int
 */
var $profiles_per_page = 10;
public $cur_tab;


/**
 * Groups_Requests constructor.
 */
function __construct() {
    parent::__construct();
    $this->cur_tab = isset($_GET['tab']) ? $_GET['tab'] : NULL;
    add_action( 'wp_ajax_nopriv_um_groups_get_requests', array( $this, 'ajax_get_members' ) );
    add_action( 'wp_ajax_um_groups_get_requests', array( $this, 'ajax_get_members' ) );
}

function only_requests( $query ) {
    global $wpdb;
    
    $this->cur_tab = isset($_GET['tab']) ? $_GET['tab'] : NULL;
    
    $group_id = $query->query_vars['um_group_id'];
    $groups_table_name = UM()->Groups()->setup()->db_groups_table;
    
    if ($cur_tab == "requests"):
        $group_meta = $wpdb->prepare(
            "{$wpdb->users}.ID IN(
                SELECT DISTINCT tbg.user_id1 FROM {$groups_table_name} as tbg
                WHERE tbg.user_id1 = {$wpdb->users}.ID AND tbg.group_id = %d AND tbg.status = 'pending_admin_review' 
            )",
            $group_id
        );
    elseif ($cur_tab == "rejected"):
                    $group_meta = $wpdb->prepare(
            "{$wpdb->users}.ID IN(
                SELECT DISTINCT tbg.user_id1 FROM {$groups_table_name} as tbg
                WHERE tbg.user_id1 = {$wpdb->users}.ID AND tbg.group_id = %d AND tbg.status = 'rejected' 
            )",
            $group_id
        );
    else:
                    $group_meta = $wpdb->prepare(
            "{$wpdb->users}.ID IN(
                SELECT DISTINCT tbg.user_id1 FROM {$groups_table_name} as tbg
                WHERE tbg.user_id1 = {$wpdb->users}.ID AND tbg.group_id = %d AND ( tbg.status = 'pedng_admin_review' OR tbg.status = 'rejected' )
            )",
            $group_id
        );
    endif;



    $query->query_where = str_replace(
        'WHERE 1=1',
        "WHERE 1=1 AND (" . $group_meta . " ) ",
        $query->query_where );

    return $query;
}
}

Upvotes: 0

Views: 382

Answers (2)

osakagreg
osakagreg

Reputation: 577

The problem in this case was that the variable used a $_POST request, not $_GET.

The idea of adding the query string to allowed WP variables, was a good one though.

Upvotes: 0

Melaku Minas Kasaye
Melaku Minas Kasaye

Reputation: 658

If it is a custom parameter register it with Wordpress:

add_action('init','wpse46108_register_param');
function wpse46108_register_param() { 
    global $wp; 
    $wp->add_query_var('tab'); 
}

Then the value of 'tab' can be found with get_query_var

$tab= get_query_var('tab');

Then you could try

var_dump($tab); 

Or

die(print_r($tab));

Upvotes: 2

Related Questions