Suporte » Plugins e hacks » url personalizados em plugin

  • Bom dia,

    desenvolvi um plugin que usa dados externos ao wordpress, para o usar basta por um shortcode em uma página como: [xpto]

    A página aonde o shortcode está é http://dev1.local/imoveis/

    ao invés de usar parametros do tipo http://dev1.local/imoveis/?param1=valor1&param2&valor2 gostaria de usar http://dev1.local/imoveis/param1/valor1/param2/valor2

    para construir a url amigável acima coloquei no plugins o seguinte código:

    function add_custom_rewrite_ep() {
    add_rewrite_endpoint(‘param1’, EP_PAGES);
    add_rewrite_endpoint(‘param2’, EP_PAGES);
    }
    add_action( ‘init’, ‘add_custom_rewrite_ep’ );

    depois de fazer o flush da regras de rewrite a url amigável funciona bem. O problema é quando tento recuperar os valores dos parâmetros param1 ou param2 usando get_query_var(‘param1′,’default’) por exemplo, dá o seguinte erro:

    Fatal error: Uncaught Error: Call to a member function get() on null in /app/public/wp-includes/query.php:28
    Stack trace:
    #0 /app/public/wp-content/plugins/centralimo/centralimo.php(167): get_query_var(‘param1’, ‘default’)
    #1 /app/public/wp-settings.php(305): include_once(‘/app/public/wp-…’)
    #2 /app/public/wp-config.php(86): require_once(‘/app/public/wp-…’)
    #3 /app/public/wp-load.php(37): require_once(‘/app/public/wp-…’)
    #4 /app/public/wp-blog-header.php(13): require_once(‘/app/public/wp-…’)
    #5 /app/public/index.php(17): require(‘/app/public/wp-…’)
    #6 {main}
    thrown in /app/public/wp-includes/query.php on line 28

    Tentei adicionar o seguinte código tb, sem conseguir resolver a questão:

    function add_query_vars_filter( $vars ){
    $vars[] = “param1”;
    $vars[] = “param2”;
    return $vars;
    }
    add_filter( ‘query_vars’, ‘add_query_vars_filter’);

    Tentei tb alterar as prioridades da add_action e do add_filter, e nada.

    Alguém sabe como resolvo isso? Podem ajudar-me?

    Desde já agradeço.

A visualizar 2 respostas - de 1 a 2 (de um total de 2)
  • Olá @lcostapt,

    acho que estás no bom caminho, mas estás a confundir as coisas.

    para o que tu queres, parece-me mais indicado usares o add_rewrite_rule, assim:

    
    // functions.php
    function prefix_add_rules() {
        add_rewrite_rule('imoveis/([0-9]{4})/([0-9]{2})', 'index.php?pagename=imoveis&param1=$matches[1]&param2=$matches[2]', 'top');
    }
    add_action('init', 'prefix_add_rules');
    

    a expressão regular terá que ser modificada ao teu caso.

    Assim, no teu código, podes “apanhar” as variáveis:

    
    $param1 = get_query_var( 'param1' );
    $param2 = get_query_var( 'param2' );
    

    espero ter ajudado,
    p.

    PS:

    ao usares a add_rewrite_endpoint, estás a criar 2 endpoints diferentes:

    
    add_rewrite_endpoint( 'param1', EP_PAGES);
    add_rewrite_endpoint( 'param2', EP_PAGES);
    

    isto significa que terás para

    imoveis/param1/value1/still-value1/param2/value2

    – param1 terá então value1/still-value1/param2/value2
    – param2 estará vazio

    Se chamares /imoveis/param2/value2/

    – param1 estará vazio
    – param2 terá value2

    • Esta resposta foi modificada Há 4 meses, 3 semanas por  pcarvalho.
A visualizar 2 respostas - de 1 a 2 (de um total de 2)