it-swarm.dev

Generování pravidla pro přepsání sSecific Post-Requests z odeslaného formuláře?

Mám formulář (způsob post), který umožňuje filtrovat mé příspěvky podle konkrétních kritérií, např. "Nejnovější", "Tento týden", "Minulý týden", ...

Funguje to dobře, ale URL je samozřejmě pro každý požadavek stejné. Nechci změnit metodu odesílání na GET a změnit URL s tímto trikem. Hledám řešení, kde mohu přidat pravidlo přepsání existujícím, které by umožnilo mít dynamické adresy URL jako

http://myurl.com/most-recent
http://myurl.com/last-week
http://myurl.com/category-1/most-recent
http://myurl.com/category-1/last-week

Pravidlo přepsání, které vyhledává slova "nejnedávnější", "minulý týden", ... na konci adresy URL, odstraní tyto a pak se vrátí k normálním pravidlům přepisu. Takže ty prdefined Post Request by fungovaly pro kategorie, stránky, příspěvky, ...

Doufám, že můžete pochopit, co tím myslím!

1
chris

Představuji si, že by to nebylo příliš těžké. Za předpokladu, že je znám počet vlastních dynamických adres URL, by to mělo být trik:

foreach ( array( 'most-recent','last-week','category-1/most-recent','category-1/last-week') as $page )
  add_rewrite_rule( "$page/?$", 'index.php', 'top' );

Co to znamená, je WordPress "Kdykoliv máte strukturu url, která odpovídá X, zacházejte s ní, jako by byla url jen site.com/index.php, a zkontrolujte proti tomuto pravidlu před čímkoliv jiným." WordPress bude s ním zacházet, jako by se jednalo o domovskou stránku, ale bude také posílat informace $_POST z formuláře a získat správné informace.

Tento první argument je regulární výraz, takže nemusí být špatný nápad spustit každou položku prostřednictvím preg_quote() předem.

Doufám, že to pomohlo!

UPRAVIT

Pro tuto operaci bych důrazně nedoporučoval používat žádné zástupné regulární výrazy. V opačném případě se stránky začnou shodovat s tímto pravidlem.

Pro naše účely považujeme tyto struktury za pozice, oddělené /. Například v category-1/most-recent by pozice 1 byla category-1 a pozice 2 by byla most-recent. Takže pro všechny struktury vytvořte pole pro každou pozici se všemi řetězci, které by mohly jít do této pozice. Možná byste měli něco takového:

$timing = array(
  'most-recent',
  'last-week',
);
$cats = array(
  'category-1',
  'category-2',
  'category-3'
);
$timing = array_map( 'preg_quote', $timing );
$timing = implode( '|', $timing );
$cats = array_map( 'preg_quote', $cats );
$cats = implode( '|', $cats );
add_rewrite_rule( "($timing)/?$", 'index.php', 'top' );
add_rewrite_rule( "($cats)/($timing)/?$", 'index.php', 'top' );
1
John P Bloch

strávil jsem hodiny, snažil jsem se přesně to, co jsi napsal, a přestože začal googling a zkoumání ... prostě to nefunguje. I když jsem napsal malý functon, který ukazuje pravidla přepsání v admin. Udělal jsem snímek a připojil jej a ačkoli nějaký odkaz. Bylo by skvělé, pokud vy nebo někdo má řešení nebo nápad.

zde je jeden odkaz, který by měl fungovat. Opustím kategorie, abych to trochu zjednodušil.

http: //localhost/myurl.com/summarizes/interviews/from-this-week

nemohu připojit snímek obrazovky, toto je pravidlo, které se přidá

(od-ten-týden | od-tento měsíc | od-velký-bang) /? $ index.php (shrnuje/rozhovory)/(od-tento týden | od-tento měsíc | od-velký-bang)\t /? $ index.php

0
chris