Przepisywanie URL-a niestandardowego typu posta?

32

Ustawiam niestandardowy typ postu dla moich projektów portfela. Główny adres URL tego adresu znajduje się pod adresem/projects/

Teraz ustawiłem także moje posty na blogu /articles/*/na link bezpośredni w strukturze permalink. Oznacza to, że kiedy przejdę do projektu portfolio, adres URL zmieni się/articles/projects/project-name/

Wiem, że musi istnieć sposób, aby przepisać permalinki tylko dla moich niestandardowych typów postów. Ale nie znam składni w deklarowaniu informacji o błędzie adresu URL - byłbym wdzięczny za każdą pomoc, jaką mogę uzyskać!

Jake
źródło

Odpowiedzi:

42

Po zarejestrowaniu niestandardowego typu postu musisz określić, że reguła przepisywania nie powinna być poprzedzona istniejącą strukturą URL.

Krótko mówiąc, oznacza to, że ta linia w Twoim register_post_typepołączeniu:

'rewrite' => array('slug' => 'projects'),

powinien zmienić się w to:

'rewrite' => array('slug' => 'projects','with_front' => false),

Aby uzyskać więcej informacji, sprawdź rewriteargument z wpisu kodeksu naregister_post_type

edycja: po prostu upewnij się, że po zaktualizowaniu kodu opróżniasz reguły przepisywania, odwiedzając Ustawienia> Permalinki. W przeciwnym razie nadal zobaczysz stare linki.

0x61696f
źródło
genialne dziękuję! Żeby to wyjaśnić, wszystko, co muszę zrobić, aby wyczyścić reguły, to przejść do strony Ustawienia-> Permalinki i nacisnąć „Zapisz zmiany”, prawda?
Jake
4
Nie musisz nawet zapisywać zmian. Wystarczy otworzyć stronę ustawień Permalinks (to znaczy, jeśli plik .htaccess jest zapisywalny. Jeśli nie, naciśnij Zapisz zmiany i ręcznie skopiuj kod, który zwraca w twoim .htaccess)
0x61696f
2
Wydaje mi się, że to nie działa. Moje posty dotyczące projektów nadal będą example.com/projects/title-of-post. Odwiedziłem też stronę Permalinks. Co może być tego przyczyną? W moim przypadku nie ma żadnych reguł przepisywania htaccess.
Desi
Wow, dzięki, to była brakująca część! Odwiedzanie strony permalinks nie działało, ale działało tylko ZAPISYWANIE bieżących ustawień permalink :)
Alexander Taubenkorb
Ciągle zmieniałem rzeczy bez opróżniania reguł przepisywania. Dzięki za wskazówkę!
Tan-007
15

Miałem ten problem dosłownie 3 dni temu, a potem natknąłem się na serię na wp.tutsplus.com . Zamieniłem swój własny kod, aby lepiej dostosować się do twojego pytania, ale po tym skończyłem po serii. Pamiętaj też, że nie jest to testowane.

// sets custom post type
function my_custom_post_type() {
    register_post_type('Projects', array(   
       'label' => 'Projects','description' => '',
       'public' => true,
       'show_ui' => true,
       'show_in_menu' => true,
       'capability_type' => 'post',
       'hierarchical' => false,
       'publicly_queryable' => true,
       'rewrite' => false,
       'query_var' => true,
       'has_archive' => true,
       'supports' => array('title','editor','excerpt','trackbacks','custom-fields','comments','revisions','thumbnail','author','page-attributes'),
       'taxonomies' => array('category','post_tag'),
       // there are a lot more available arguments, but the above is plenty for now
    ));
}

add_action('init', 'my_custom_post_type');

// rewrites custom post type name
global $wp_rewrite;
$projects_structure = '/projects/%year%/%monthnum%/%day%/%projects%/';
$wp_rewrite->add_rewrite_tag("%projects%", '([^/]+)', "project=");
$wp_rewrite->add_permastruct('projects', $projects_structure, false);

Teoretycznie możesz zamienić wszystko, co chcesz w adresie URL przechowywanym w $projects_structurezmiennej, co to jest właśnie to, co ostatecznie wykorzystałem.

Powodzenia i jak zawsze - koniecznie wróć i daj nam znać, jak się udało! :)

cmegown
źródło
1
Odpowiedzi złożone po prostu z linków są ogólnie uważane za nieprzydatne, ponieważ zasoby te mogą (i prawdopodobnie przestaną) istnieć w przyszłości. Podsumuj treść.
chrisguitarguy
W porządku, będę pracować nad poprawną wersją.
cmegown
11
Tam moja odpowiedź zawiera kod podobny do kodu roboczego, który mam w środowisku produkcyjnym, które z powodzeniem przepisuje niestandardowy adres URL typu posta. Mam nadzieję, że okaże się to bardziej pomocne!
cmegown