Support » Plugins » rewriteRules WordPress 6.x

  • Hallo,

    ich habe in meinem Plugin einen custom post type, den ich so definiere:

    $args_products = array(
    'labels' => array('name'=> 'Product Category'),
    'public' => true,
    'menu_icon' => 'dashicons-products',
    'supports' => array(
    'title', 'editor', 'author', 'thumbnail', 'excerpt', 'revisions', 'page-attributes',
    ),
    'has_archive' => true,
    'hierarchical' => true,
    'rewrite' => array(
    'slug' => sprintf( '%s/&products_categories&', 'products' ),
    'with_front' => false,
    ),
    );
    register_post_type( 'products', $args_products );

    mit dieser function habe ich bisher in WP5 die Umleitungsregeln ergänzt. Nun funktioniert es nicht mehr seit WP6. Ich habe die Function debugged und stelle fest, das WP sie nicht mehr durchläuft.

    function products_rewrite_rule( $rules ) {
    $newRule1 = sprintf( '%s/([^/]+)/(?:(?!\bpage\b).)+/([^/]+)/?$', 'products' ); // matches products (products) but let WordPress do taxonomy pagination stuff correctly
    $newRule2 = sprintf( '%s/([^/]+)/([^/]+)/(?:(?!\bpage\b).)+/([^/]+)/?$', 'products' );
    $newRules = array();
    $newRules[$newRule1] = 'index.php?products=$matches[2]';
    $newRules[$newRule2] = 'index.php?products=$matches[3]';
    $rules->rules = $newRules + $rules->rules;
    }
    add_filter( 'generate_rewrite_rules', 'products_rewrite_rule' );

    Zudem testete ich diesen Filter ohne Erfolg.

    add_filter(‚rewrite_rules_array‘,’……………

    Der Slug, den ich für den cpt aufbaue ist: https://domain.com/products/cat1/subcat2/productname/

    Kann jemand bitte unterstützen?

Ansicht von 7 Antworten - 1 bis 7 (von insgesamt 7)
  • Aus dem Zusammenhang gerissener Code mit wenig Informationen, was eigentlich erreicht werden soll, ist schwierig zu beurteilen. Dazu kommt, dass wir hier eigentlich Anwendungs-Support anbieten wollen. Für Fragen zur Programmierung bist du bei WordPress Stackexchange besser aufgehoben. Trotzdem ein paar Gedanken dazu:

    • Wenn du einen CPT registrierst, solltest du den Post Type im Singular nutzen: register_post_type( 'book', $args );. Wie bindest du die Funktion ein? Eigentlich sollte das (stark verkürzt) so aussehen:
      function ptt9_book_cpt() {
      $args = array();
      register_post_type( 'book', $args );
      }
      add_action( 'init', 'ptt9_book_cpt' );
    • Nach Möglichkeit solltest du vermeiden, dass es zu Konflikten mit anderen Plugins kommt. Installierst du zusätzlich WooCommerce, hast du plötzlich zwei Post Types product, was zu Konflikten führt. In der Dokumentation wird empfohlen, den CPT-Namen mit einem Prefix zu versehen – z.B. register_post_type( 'ptt9-product, $args ) (vgl. Reserved Post Types).
    • Die Benennung deines CPT irritiert mich. Ein Post Type ist eine Inhaltsart, so wie Seiten und Beiträge, nur mit einem eigenen Menü. Dazu passt aber nicht 'labels' => array('name'=> 'Product Category'), – möchtest du statt dessen vielleicht eine Custom Taxonomy anlegen?
    • Wenn du einen CPT registrierst, solltest du auch die Permalink-Einstellungen neu einlesen. Die Dokumentation schreibt dazu:
      If registering a post type inside of a plugin, call flush_rewrite_rules() in your activation and deactivation hook (see Flushing Rewrite on Activation below). If flush_rewrite_rules() is not used, then you will have to manually go to Settings > Permalinks and refresh your permalink structure before your custom post type will show the correct structure.

    Auch an dieser Stelle mal wieder unser beliebter Hinweis, dass wir ohne Informationen nur begrenzt helfen können. Ein Klick auf den Button in Werkzeuge > Website-Zustand → Tab Bericht tut nicht weh, liefert uns aber, wenn du den Bericht in deine Frage einfügst, viele hilfreiche Daten.

    Thread-Starter ptt9

    (@ptt9)

    Hallo @pixolin,

    was ich erreichen will, steht eigentlich auch da aber ich kann es gern noch einmal detaillierter darstellen. Trotzdem danke

    Ich möchte mit dem Slug https://domain.com/products/cat1/subcat2/productname/ bei meiner Detailseite des CPT landen und das geht aktuell nicht mehr, hat aber in WP5 wunderbar funktioniert mit der Funktion products_rewrite_rule( ). Die CPT-Registrierung ist so korrekt und in der Backend-Pflege steht richtig dieser Permalink : https://domain.com/products/&products_categories&/productname/ da das Produkt aber in nicht nur in einer Kategorie erreicht werden soll, sondern in allen Kategorien. Es sollen sozusagen alle Kategorien korrekt aufgelöste werden also auch zum Beispiel https://domain.com/products/cat2/subcat3/productname/

    Übrigens so ähnlich

    function ptt9_book_cpt() {
    $args = array();
    register_post_type( 'book', $args );
    }
    add_action( 'init', 'ptt9_book_cpt' );

    erledige ich das natürlich auch.

    Die Code-Abschnitte, die ich hier rein kopiert sind nur die relevanten und „product“ und ’name’=> ‚Product Category‘ ist ebenfalls nur vereinfacht, um den Kontext einfach zu halten.

    Es geht mir rein um das korrekte rewrite-handling.

    Das „registrierst, solltest du auch die Permalink-Einstellungen neu einlesen.“  habe ich natürlich auch beachtet.

    Wenn du auf Rückfragen pampig reagierst, weiterhin keine Informationen zur Website preisgibst, auf Fragen nur teilweise eingehst, „natürlich“ alles beachtet hast und selber entscheiden möchtest, welche Informationen relevant sind, kann ich dir auch nicht weiterhelfen.

    Ich drücke aber die Daumen, dass du noch eine Lösung findest.

    Thread-Starter ptt9

    (@ptt9)

    @pixolin entschuldige aber das war bestimmt nicht meine Absicht, ich habe nur sachliche weitere Infos und Feedbacks gegeben und wollte in die richtige Richtung lenken.

    Das ich hier im WP6 Kontext etwas falsch mache, ist offensichtlich.

    Die Webseite ist leider offline und im Update-Prozess von 5 auf 6.

    „Sachlich weitere Infos“ wären zum Beispiel der Website-Bericht, der immer noch fehlt. Es ist OK, wenn du deine URL nicht teilen kannst (z.B. weil die Website offline ist). Dann erspart uns ein Hinweis zumindest Rückfragen.

    Ich verstehe immer noch nicht, was du eigentlich erreichen möchtest. Du erstellst einen Custom Post Type, um den Permalink für Produkte zu ändern?

    Wie eingangs erwähnt, ist deine Frage hier eher off topic. Ich glaube nicht, dass du so brauchbare Antworten bekommst, vor allem wenn nur verkürzte/geänderte Auszüge aus dem Code ohne Kontext präsentiert werden.

    Thread-Starter ptt9

    (@ptt9)

    Der CPT ist existent und alle Produkte sind gepflegt, sie sollen nur unter verschieden Slugs/Kategorien erreichbar sein, dafür gibt es den Platzhalter &products_categories& im Slug, so ist das Produkt auch aktuell unter WP6 zu erreichen. Bsp. https://domain.com/products/&products_categories&/productname/

    Nun soll es eine rewriteRule regeln, dass das Produkt unter https://domain.com/products/cat2/subcat3/productname/ und https://domain.com/products/cat2/subcat3/productname/ und https://domain.com/products/cat5/subcat1/productname/ zu erreichen ist, weil es in den beiden Kategorien aktiv ist.

    Machen wir es kurz: Immer noch kein Website-Bericht. Schade.
    Ich schließe den Thread, weil wir so nicht weiterkommen.

Ansicht von 7 Antworten - 1 bis 7 (von insgesamt 7)
  • Das Thema „rewriteRules WordPress 6.x“ ist für neue Antworten geschlossen.