• Chce w wordpresie odpalić swój skrypt który mi będzie generował URLe na podstawie których IFami będę wyświetlał dane.

    Zastosowałem się do zaleceń żeby odpowiednio dać uprawnienia dla strony w wordpresie. Problem pojawia się kiedy skrypt generuje URLe /strona1 /strona2 wtedy już wordpress nie ma takiej kategorii i wywala błąd 404.
    Błąd nie jest wywalany kiedy wykonuje kategoria/(liczba)
    Czy istnieje możliwość zmuszenia WordPressa żeby dla danej kategorii nie wywalał błędu 404?

Viewing 7 replies - 1 through 7 (of 7 total)
  • Istnieje. Nawet kilka.

    Najpoprawniej byłoby to zrobić za pomocą WP_Rewrite. Użyj funkcji add_rewrite_rule i za jej pomocą obsługuj takie linki.

    Jeśli to nie pomoże, albo będzie za trudne, to zawsze możesz próbować „brutalnie” przestawiać zmienną is_404 – uważaj tylko, żeby zrobić to w odpowiednim momencie (po sparsowaniu przez WP requestu, ale przed wybraniem template’u). (Hook init chyba powinien być w tym przypadku OK, ale piszę z głowy, więc w tej kwestii mogę się mylić).

    Twórca wątku Ddaro

    (@darney)

    Właśnie głowiłem się sporo z tym wp_rewrite ale nadal mi wywala błędy chyba nie poprawnie rozumiem o co tu w tej funkcji chodzi.
    Chciałem żeby po nazwa-strony.pl/pliki (załadował się mój skrypt)
    Znalazłem już wcześniej właśnie WP_Rewrite i postanowiłem w functions
    dodać wyjątek w następujący sposób.
    add_filter(’rewrite_rules_array’, 'add_rewrite_rules’);

    add_filter('generate_rewrite_rules', 'pliki');
    function customposttype_rewrites($wp_rewrite) {
    	$newrules = array();
    	$newrules['pliki/?$'] = 'index.php?post_type=pliki';
    	$wp_rewrite->rules = $newrules + $wp_rewrite->rules;
    }

    Dla pliki stworzyłem nawet kategorie ale jak już w adresie wpisuje
    nazwa-strony.pl/pliki/dane

    To dostaję błąd 404
    Ta funkcja w ogóle nie dodaje mi URL do wyjątku dlatego tez zwracam się o pomoc jak poprawnie sformułować ten warunek.
    Czy poprawnie sformułowałem to w functions?
    Czy powinienem jeszcze coś w pliku szablonu dodać?

    Nie, no to nie zadziała tak, jak byś chciał, z co najmniej kilku powodów 😉

    1. Masz Custom Post Type o nazwie „pliki”? Bo właśnie na niego przekierowujesz.
    2. Twoja reguła (Twój regexp) dopasowuje się do 'pliki/’ umieszczonego na końcu adresu url ($ oznacza koniec stringa). To, co chciałbyś zrobić, bardziej powinno wyglądać jakoś tak: pliki/?([^/]+)/?$ (pisane tutaj, więc może mieć bugi, ale ideę powinno zarysowywać).

    Pamiętaj też o tym, że jeśli dodajesz swoje reguły, to musisz sflushować rewrite rulesy – one są cache’owane w bazie, więc samo dodanie czegoś na tym hooku zbyt wiele nie da, bo ten hook nie jest wołany podczas każdych odwiedzin strony. Najłatwiej będzie w tym celu wejść w ustawienia Bezpośrednich odnośników i zapisać te ustawienia.

    Twórca wątku Ddaro

    (@darney)

    Jakoś udało mi się znaleźć odpowiedni artykuł na ten temat.
    Dla potrzebujących wklejam linka.
    http://stackoverflow.com/questions/13140182/wordpress-wp-rewrite-rules

    Rozwiązałem problem wykonując

    function add_rewrite_rules( $wp_rewrite )
    {
        $new_rules = array
        (
            '(pliki)/(.+?)/page/?([0-9]{1,})/?$' => 'index.php?pagename='.
            $wp_rewrite->preg_index(1).'&varname='.
            $wp_rewrite->preg_index(2).'&page='.
            $wp_rewrite->preg_index(3),
    
            '(pliki)/(.*?)/?$' => 'index.php?pagename='.
            $wp_rewrite->preg_index(1).'&varname='.
            $wp_rewrite->preg_index(2)
        );
        // Always add your rules to the top, to make sure your rules have priority
        $wp_rewrite->rules = $new_rules + $wp_rewrite->rules;
    }
    
    function query_vars($public_query_vars)
    {
        $public_query_vars[] = "varname";
    
        return $public_query_vars;
    }
    
    function ebi_flush_rewrite_rules()
    {
        global $wp_rewrite;
    
        $wp_rewrite->flush_rules();
    }
    
    add_action( 'init', 'flush_rewrite_rules');
    add_action('generate_rewrite_rules', 'add_rewrite_rules');
    add_filter('query_vars', 'query_vars');

    Jak w URL wpiszę pliki/cokolwiek już WP nie generuje błędu 404
    W każdym razie dzięki Krzysiek za pomoc bo nakierowałeś mnie czego dokładnie mam szukać:)
    Powiedz mi jedno jeszcze. Wspomniałeś że WP zapisuje te URLE do bazy i masz racje bo jak wywalę z FUNCTIONS ten wyjątek to WP dalej pamięta go i nie generuje błędu 404. Czy idzie to gdzieś wyczyścić?

    OK, to tylko jedna, ale za to bardzo ważna uwaga…

    NIE CHCESZ flushować rewrite rulesów w init. Dlaczego? Między innymi dlatego, że to jest dość złożona i kosztowna operacja, a jeśli będziesz ją wykonywał w init, to będzie się wykonywać podczas każdej odsłony strony. (zupełnie niepotrzebnie, bo wystarczy wykonać ją jeden raz po zmianie reguł).

    Twórca wątku Ddaro

    (@darney)

    Ponawiam temat z małym pytaniem.
    Zaszła potrzeba dodania kolejnej reguły prócz /pliki
    potrzebuje kolejną np. /test-adres
    Kiedy robię kopiuj wklej i zamieniam pliki na test-adres otrzymuje komunikat o re deklaracji funkcji no i jest to logiczne. Wnioskuję, iż muszę zmienić coś wewnątrz funkcji

    function add_rewrite_rules( $wp_rewrite )
    {
        $new_rules = array
        (
            '(pliki)/(.+?)/page/?([0-9]{1,})/?$' => 'index.php?pagename='.
            $wp_rewrite->preg_index(1).'&varname='.
            $wp_rewrite->preg_index(2).'&page='.
            $wp_rewrite->preg_index(3),
    
            '(pliki)/(.*?)/?$' => 'index.php?pagename='.
            $wp_rewrite->preg_index(1).'&varname='.
            $wp_rewrite->preg_index(2)
        );
        // Always add your rules to the top, to make sure your rules have priority
        $wp_rewrite->rules = $new_rules + $wp_rewrite->rules;
    }

    Nie jestem zbyt biegły w tym więc pytanie moje brzmi. Jak dodać tutaj kolejny warunek, regułe?

    Z oczywistych względów nie możesz przekopiować całości, bo wtedy będziesz miał 2 funkcje o tej samej nazwie, a tak być nie może.

    Możesz przekopiować całość, a potem w skopiowanym kodzie zmienić nazwę funkcji, albo przekopiować tylko linijki pomiędzy nawiasami z linii 4 i 13.

Viewing 7 replies - 1 through 7 (of 7 total)
  • Temat ‘Pominięcie błędu 404 dla własnego skryptu.’ jest zamknięty na nowe odpowiedzi.