Jak zmienić strukturę permalink dla niestandardowego typu postu i jego systematyki?

11

To jest odpowiedź na wcześniejsze pytanie, które miałem, ale lubię teraz zagłębiać się w szczegóły, aby móc w pełni to rozwiązać.

Ponownie, dzięki (normalnym) postom zmiana bezpośredniego linku jest tak prosta, jak przejście do Ustawienia> Łącze bezpośrednie i zmiana go na dowolne, na przykład szeroko stosowane %category%/%postname%.html. To wszystko działa. Gdyby to było tak łatwe dla niestandardowego typu postu i jego taksonomii.

To właśnie lubię robić.

  1. http://mywordpress.com/portfolio.html - Wyświetl wszystkie posty we wszystkich kategoriach.
  2. http://mywordpress.com/portfolio/music/ - Wyświetl wszystkie posty w tej kategorii.
  3. http://mywordpress.com/portfolio/music/trance/ - Wyświetl wszystkie posty w tej kategorii (potomnej).
  4. http://mywordpress.com/portfolio/music/trance/Tiesto.html - Wyświetl post.

Do tej pory mam następujące:

  1. Najpierw stworzył custom_post_typenazwie projektu i taxonomy project_category .
  2. Utworzyłem portfolio strony i nadałem mu szablon strony, który będzie zawierał listę wszystkich post_type = projectpostów. Jak mogę dodać .html do bezpośredniego linku stron? Teraz linkuje do http://mywordpress.com/portfolio, a ja chcę http://mywordpress.com/portfolio.html . To powinno rozwiązać pierwszy problem.
  3. Wtedy wszystko stanie się trudne, ponieważ nie wiemy z góry, ile jest podkategorii, może nawet nie ma. Więc struktura, której szukamy, jest portfolio/(CATEGORY PATH FROM TOP TO CHILD)/post.html. Nadal utknąłem w tym momencie. Myślę, że powinienem w jakiś sposób pobrać ostatnią kategorię dodaną do ścieżki i przekazać ją wzdłuż kategorii project_category , co powinno doprowadzić do pliku taksonomy.php, w którym mogę ją poprawnie przetworzyć.
  4. Nie rozwiązałem tego, ale powinno to mieć coś wspólnego z %postname%.htmlkońcem czegoś.

Mam nadzieję, że mój problem jest wyraźny i że są odważni programiści, którzy pomogą mi rozwiązać ten problem, który już zajęło mi cztery PEŁNE dni!

znak
źródło
1
Rozwiązanie, które podałem w ostatnim pytaniu, powinno działać w ten sposób, jeśli poprawnie je wdrożyłeś. Jedyną rzeczą jest to, że nie możesz dostać części HTML
Manny Fleurmond,
Tak, ale został zablokowany na określonej ścieżce, więc tylko kategoria / podkategoria / strona, podczas gdy może nie być podkategorii lub nawet więcej. To jest bardziej dynamiczne.
Mark
Albo nie wdrożyłem go poprawnie;)
Mark

Odpowiedzi:

4

Ok, myślę, że mogę mieć rozwiązanie. Nie mam pojęcia, czy jest to właściwy sposób, aby to osiągnąć, ale na razie jest to jedyna rzecz, która wydaje się działać.

add_filter('rewrite_rules_array', 'mmp_rewrite_rules');

function mmp_rewrite_rules($rules) {
    $newRules                               = array();
    $newRules['portfolio/(.+)/(.+?).html$'] = 'index.php?project=$matches[2]';
    $newRules['portfolio/(.+)/?$']          = 'index.php?project_category=$matches[1]'; 

    return array_merge($newRules, $rules);
}


add_filter('request', 'mmp_rewrite_request');

function mmp_rewrite_request($vars) {
    if (isset($vars['project_category'])) {
        if (strpos($vars['project_category'], '/') !== false) {
            $categories = explode('/', $vars['project_category']);
            $vars['project_category'] = $categories[count($categories) - 1];
        }
    }

    return $vars;
}
znak
źródło
Filtr żądań to dobry sposób na filtrowanie, jeśli pytamy o kategorię (w rzeczywistości termin) i post. Pozwala dodać tylko jedną regułę przepisywania i uzyskać stronę postu, niezależnie od tego, czy post należy do kategorii, podkategorii, czy nie.
ZalemCitizen
1

2 różne metody:

* Zobacz uwagi na dole tego postu.


na przykład, chcesz mieć taką strukturę bezpośredniego łącza :
/ MAIN_CATEGORY / SUB_CAT_2 / Another_SUBCAT / my-post

Na początku może być konieczne ustawienie permalinków na /% category% /% postname% . Następnie...




METODA 1:

utworzyć kategorie Standard ( MAIN_CATEGORY, SUB_CAT_1, and etc..) i zarejestrować Zwyczaj POST, w tym tego parametru:

'taxonomies'    => array('category'..)

i użyj tych kodów, aby zmienić permalinki: https://wordpress.stackexchange.com/a/195643/33667
Następnie, po opublikowaniu NIESTANDARDOWEGO POCZTY (jeśli jest dołączony do kategorii), adres URL będzie:
example.com/MAIN_CATEGORY/SUB_CAT_1/my-post



METODA 2:

(ps ta metoda nie jest zalecana, jeśli planujesz opublikować setki lub tysiące postów)

zarejestruj CUSTOM POST (nazwany MAIN_CATEGORY), w tym następujące parametry:

    "supports"      => array('page-attributes'......
    "hierarchical"  => true,

Następnie, publikować własne posty jak ten: (tj opublikować kilka niestandardowych posty , nazwany Następnie, po opublikowaniu kolejny post, ale wybrać. jako rodzica.
SUB_CAT_2, SUB_CAT_1..SUB_CAT_2





ps
1) Jeśli jesteś nowicjuszem, przejrzyj : Zarejestruj NIESTANDARDOWY POCZTA i Rejestruj NIESTANDARDOWY POCZTA w TAXONOMY
2), jeśli potrzebujesz funkcji wyszukiwania dla podpoziomów, użyj niestandardowego zapytania wyszukiwania

T.Todua
źródło