Rozwiąż konflikt nazwy niestandardowego typu kontra kontra link do strony (ten sam komunikat)


19

Mam niestandardowy typ posta o nazwie „visningshus”, a także stronę z tym ślimakiem. Jest tak, jak powinno (musi) być.

Obecnie „ http://my-site.com/visningshus ” wymienia wszystkie posty tego typu. Chcę zamiast tego wyświetlić stronę z tym linkiem.

Jak sprawić, by Wordpress nie nadawał pierwszeństwa nazwie typu postu, ale zamiast tego łączył się bezpośrednio i wyświetlał stronę?

Odpowiedzi:


33

Najłatwiej byłoby po prostu wyłączyć stronę archiwum dla tego CPT:

register_post_type( 'visningshus',
    array(
        [...]
        'has_archive' => false,
        [...]
    )
);

Nie zapomnij później odświeżyć permalinków w „Ustawienia> Permalink”


1
Działa idealnie - ale teraz wszystkie permalinki zaczynające się od nazwy niestandardowego typu postu dają 404, mimo że są poprawne w wp-admin i wydaje się, że nie ma przepisywania. To znaczy, że wszystkie permalinki są poprawne na stronie, ale wszystkie niestandardowe posty dają 404. Czy możesz w tym pomóc? :)
Henrik Erlandsson

@HenrikErlandsson Może twój typ posta ma taką samą nazwę strony. W takim przypadku zalecamy zmianę nazwy typu posta. Przykład: nazwa niestandardowego typu posta - przed: produkty po: cpt_products.
Bruno Monteiro,

Bardzo inteligentny. Rozwiązuje wiele problemów
bysanchy,

8

Nie mam wystarczającej reputacji, aby komentować post @ Carl, ale jest to poprawna odpowiedź (przynajmniej w tej sytuacji, gdy slug strony i niestandardowy typ postu są takie same i nie używa pliku archive.php)

Ale jego odpowiedź dawałaby błędy przy paginacji. Aby uniknąć błędów stronicowania:

add_rewrite_rule('^visningshus/page/([0-9]+)','index.php?pagename=visningshus&paged=$matches[1]', 'top');

Spogląda na paginację, pobiera numer strony, a następnie po drugiej stronie zmusza ją do użycia strony z pasującym ślimakiem, a następnie wstawia zmienną strony.

To dodatkowo do 'has_archive' => false,pisał powyżej powinny osiągnąć pożądaną funkcjonalność.

Jak powiedzieli inni, pamiętaj, aby opróżnić reguły przepisywania, odwiedzając Ustawienia> Permalinks po dokonaniu tej zmiany.

Mam nadzieję, że to komuś pomaga, ponieważ wiem, że to mnie zaskoczyło na bardzo długo.


4

Tjena Henrik!

Myślę, że wszystko, co musisz zrobić, to dodać regułę przepisywania do już utworzonych reguł przepisywania Wordpress. Dodaj ten fragment kodu do swoich funkcji. Php motywu lub dołącz jako osobny wtyczkę ...

add_action('init', function () {
     add_rewrite_rule('visningshus/?$','index.php?pagename=visningshus', 'top');
     flush_rewrite_rules();
}, 1000);

4
Jeśli ktoś tego używa, usuń flush_rewrite_rules();Nie powinieneś zmieniać reguł przepisywania za initkażdym razem. Ponownie załaduj, a następnie usuń lub ręcznie
opróżnij łącza bezpośrednie,

0

Rozwiązałem go bez rozwiązania konfliktu. Utwórz stronę zawierającą informacje o ślimakach i napisz, co chcesz. Zanotuj identyfikator tej strony.

Utwórz i dostosuj szablon archive-custom-post-type.php w dowolny sposób (najprawdopodobniej użyjesz szablonu strony), ale zamień część zapętloną na

$recent = new WP_Query("page_id=your-page-id");  
while($recent->have_posts()) : $recent->the_post();
    the_content();
endwhile;

Następnie, gdy przejdziesz na http://my-site.com/visningshus zobaczysz treść zarządzaną przez stronę pod właściwym adresem URL.

Daj mi znać, że to działa.


Fajny pomysł, ale jest to zbyt skomplikowane. Wypróbowałeś moje rozwiązanie?
kraftner

@ Kraftner nie, nie zrobiłem tego. Spróbuję następnym razem. Dzięki!
molokom

Ma to również pewne skutki uboczne, takie jak nagłówek i wszystko wciąż jest tworzone, jakby to była strona archiwum, a nie strona. Nie radziłbym używać tego rozwiązania.
kraftner

Co jeśli zmieni się identyfikator strony? To nie jest bezpieczne.
Joel James,

0

Nie wolno głosować, ale + dla rozwiązania Carlsa, typ register_post_type powinien mieć

'has_archive' => false

Prosty. Jednak w przypadku problemów z paginacją spójrz na

add_rewrite_rule

0

To, co mnie naprawiło, to ustawienie archiwum na fałsz, ale także ustawienie hierarchii na fałsz podczas konfigurowania mojego niestandardowego typu postu!


0

Oto ogólne rozwiązanie pozwalające ustalić priorytet stronicowania w stosunku do treści niestandardowych typów postów dla KAŻDEGO ślimaka typu niestandardowego.

// prioritize pagination over displaying custom post type content
add_action('init', function() {
  add_rewrite_rule(
    '(.?.+?)/page/?([0-9]{1,})/?$',
    'index.php?pagename=$matches[1]&paged=$matches[2]',
    'top'
  );
});

Oprócz dodania tego fragmentu należy również upewnić się, że niestandardowy typ posta ma archive = false

i wreszcie przejdź do strony ustawień Permalinks Ustawienia> Permalinki (/wp/wp-admin/options-permalink.php) i zapisz bieżące ustawienia, aby odświeżyć strukturę linków na stronie.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.