Reescrita de URL personalizada para WordPress

4

Estou tentando adicionar uma regra de regravação personalizada com uma única variável a uma página específica. A versão 'feia' é http://example.com/used-cars/car/?carname=name-of-car e a versão 'bonita' que estou procurando é http://example.com/used-cars/car/name-of-car .

http://example.com/used-cars/car/ é uma página com um modelo personalizado que não exibe nada se a variável carname não estiver definida. Este é o código que tenho até agora:

add_filter('query_vars', 'ip_add_rewrite_query_vars');
function ip_add_rewrite_query_vars($query_vars) {
    $query_vars[] = 'carname';
    return $query_vars;
}

add_action('init', 'ip_add_rewrite_rules');
function ip_add_rewrite_rules() {
    add_rewrite_rule(
        'used-cars/car/([^/]+)/?$',
        'index.php?p=403&carname=$matches[1]',
        'top'
    );
}

Com isso, quando vou para http://example.com/used-cars/car/name-of-car , ele apenas redireciona para http://example.com/used-cars/car e get_query_var('carname') retorna null .

Eu tentei algumas variações diferentes nas maneiras de fazer isso (como modificar $wp_rewrite diretamente, usando add_rewrite_tag() ), mas ou obtenho o mesmo resultado ou um erro 404. Eu libero as regras de reconfiguração e o cache do meu navegador toda vez que tento testar a página novamente. Eu instalei o plugin de análise de reescrita e minha reescrita aparece lá e parece correta em comparação com os padrões. Tanto quanto eu posso ver em todos os exemplos na web, o código que eu tenho deveria funcionar - é praticamente o mesmo exemplo da página do códice - e eu não tenho idéia do porque isso não acontece.

Essa é uma configuração multisite (cada site em um subdomínio diferente) - não estou familiarizado com o multisite, mas não acho que haja algo que afete as regravações personalizadas?

    
por amandarm 04.01.2013 / 00:05

1 resposta

1

Eu faço algo semelhante com registros personalizados chamados lojas e seu número de identificação específico. No meu caso eu quero enlace

para carregar com a variável shop_unid sendo o registro UNID. Aqui está minha função de trabalho:

//Shop page rewrites
function shop_rewrite() {
    add_rewrite_rule('^shops/([^/]*)/?','index.php?pagename=shops&shop_unid=$matches[1]','top');
    add_rewrite_tag('%shop_unid%','([^&]+)');
}
add_action('init', 'shop_rewrite');

Observe que usei nome da página em vez do número da postagem. Você nunca sabe se isso pode mudar, digamos, em um multisite diferente ou se você exportou o site para um novo servidor, para que eu sempre evite codificar os IDs de postagem específicos.

Agora, na página ou em sua própria função, isso deve funcionar:

global $wp_query;
$shop_unid = $wp_query->query_vars['shop_unid'];
print_r($shop_unid);
    
por Dennis Smolek 04.01.2013 / 00:46