Extracting a parameter from a URL in WordPress

I am trying to pass a parameter to a WordPress site using a URL – for instance:

www.fioriapts.com/?ppc=1 will be the URL.

Read More

I am intending to write a function in the functions.php file but the mechanics of how to extract a parameter in WordPress is beyond me. How can it be done?

I am finding a lot of examples on how to add a parameter to a URL using the function add_query_arg() but have found nothing on how to extract a parameter.

Related posts

Leave a Reply

4 comments

  1. Why not just use the WordPress get_query_var() function? WordPress Code Reference

    // Test if the query exists at the URL
    if ( get_query_var('ppc') ) {
    
        // If so echo the value
        echo get_query_var('ppc');
    
    }
    

    Since get_query_var can only access query parameters available to WP_Query, in order to access a custom query var like ‘ppc’, you will also need to register this query variable within your plugin or functions.php by adding an action during initialization:

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

    Or by adding a hook to the query_vars filter:

    function add_query_vars_filter( $vars ){
      $vars[] = "ppc";
      return $vars;
    }
    add_filter( 'query_vars', 'add_query_vars_filter' );
    
  2. When passing parameters through the URL you’re able to retrieve the values as GET parameters.

    Use this:

    $variable = $_GET['param_name'];
    
    //Or as you have it
    $ppc = $_GET['ppc'];
    

    It is safer to check for the variable first though:

    if (isset($_GET['ppc'])) {
      $ppc = $_GET['ppc'];
    } else {
      //Handle the case where there is no parameter
    }
    

    Here’s a bit of reading on GET/POST params you should look at: http://php.net/manual/en/reserved.variables.get.php

    EDIT: I see this answer still gets a lot of traffic years after making it. Please read comments attached to this answer, especially input from @emc who details a WordPress function which accomplishes this goal securely.

  3. You can try this function

    /**
     * Gets the request parameter.
     *
     * @param      string  $key      The query parameter
     * @param      string  $default  The default value to return if not found
     *
     * @return     string  The request parameter.
     */
    
    function get_request_parameter( $key, $default = '' ) {
        // If not request set
        if ( ! isset( $_REQUEST[ $key ] ) || empty( $_REQUEST[ $key ] ) ) {
            return $default;
        }
    
        // Set so process it
        return strip_tags( (string) wp_unslash( $_REQUEST[ $key ] ) );
    }
    

    Here is what is happening in the function

    Here three things are happening.

    • First we check if the request key is present or not. If not, then just return a default value.
    • If it is set, then we first remove slashes by doing wp_unslash. Read here why it is better than stripslashes_deep.
    • Then we sanitize the value by doing a simple strip_tags. If you expect rich text from parameter, then run it through wp_kses or similar functions.

    All of this information plus more info on the thinking behind the function can be found on this link https://www.intechgrity.com/correct-way-get-url-parameter-values-wordpress/