【问题标题】:Using $_GET within PHP class is returning NULL在 PHP 类中使用 $_GET 返回 NULL
【发布时间】:2021-04-04 18:10:47
【问题描述】:

我正在尝试在 PHP 类文件中检索查询字符串,但它总是为空。

我也尝试将 $cur_tab 存储为全局变量,但每当我在 PHP 类中使用它时,它都是空的。它适用于其他文件。

我不理解的类文件有什么不同?

完整的 URL 类似于:

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

我没有看到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;
}
}

【问题讨论】:

  • 您缺少重要的调试信息:此页面的完整 URL 是什么? var_dump($_GET); 显示什么?
  • 可能是之前的栏吗?,尝试删除它离开 domain.com/blog/groups/testes-mctestersons?tab=rejected
  • 我注意到这是一个 WordPress 环境。 this question 的一些答案可能会对您有所帮助。
  • @TangentiallyPerpendicular 谢谢。我曾尝试使用 get_query_var,但在类文件中它像其他所有内容一样为空。在其他地方进行测试时,它可以工作。也许类文件无法读取 URL?我不知道它是如何工作的。
  • 试一下(print_r($_REQUEST));

标签: php wordpress class get


【解决方案1】:

如果是自定义参数,用 Wordpress 注册:

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

那么'tab'的值可以通过get_query_var找到

$tab= get_query_var('tab');

那你可以试试

var_dump($tab); 

或者

die(print_r($tab));

【讨论】:

    【解决方案2】:

    这种情况下的问题是变量使用了$_POST 请求,而不是$_GET

    将查询字符串添加到允许的 WP 变量的想法是一个不错的想法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-28
      • 1970-01-01
      相关资源
      最近更新 更多