Cum să redirecționezi vizitatorii către un URL personalizat folosind cod PHP în functions.php

5 iun. 2013, 15:50:28
Vizualizări: 32.9K
Voturi: 1

Utilizatorii trebuie să fie redirecționați către un URL personalizat pe care îl cunosc deja (face parte din logica programării). Am nevoie doar să știu ce funcție WordPress să folosesc/ce cod PHP să utilizez pentru a redirecționa utilizatorul către noul URL. Acest cod va fi executat într-o funcție PHP în functions.php--> acea funcție va face mai întâi o procesare, și apoi va trimite utilizatorul către noul URL

Cum pot face acest lucru?

Notă-- Am încercat să folosesc wp_redirect dar nu funcționează.

Acesta este codul pe care am încercat să-l folosesc (care nu a funcționat)--

       $redirecturl = get_post_type_archive_link('property');
       echo "\n\n URL-ul de redirecționare pentru postări de tip proprietate=" + $redirecturl;
       wp_redirect( "http://" .  $redirecturl + "?post_type=property&search_keyword=" + $search_keyword ;
5
Comentarii

Editează-ți postarea pentru a ne arăta codul pe care l-ai încercat și care nu a funcționat.

Charles Clarkson Charles Clarkson
5 iun. 2013 15:59:24

@CharlesClarkson a adăugat cod care nu a funcționat în postare...

Arvind Arvind
5 iun. 2013 16:06:26

@CharlesClarkson wp_redirect funcționează doar când nu au fost deja trimise date - adică ar trebui să fie primul lucru care se întâmplă (acesta este și motivul mesajului de eroare "Cannot Modify header information-....") de aceea nu îl pot folosi...

Arvind Arvind
5 iun. 2013 16:20:58

Echo-ul este motivul mesajului de avertizare. Nu poți folosi echo pentru ceva și apoi să redirecționezi folosind wp_redirect().

Charles Clarkson Charles Clarkson
5 iun. 2013 16:27:18

Poți folosi Output Buffering, dacă chiar trebuie să folosești echo - vezi aici: http://stackoverflow.com/questions/3766353/interview-question-can-we-have-an-echo-before-header

Nicolai Grossherr Nicolai Grossherr
5 iun. 2013 16:29:48
Toate răspunsurile la întrebare 2
0

În primul rând, este greu de crezut că wp_redirect nu funcționează, mai jos este un cod (exemplu) care arată cum să-l folosești:

function wpse101952_redirect() {
  global $post;

    if( /*LOGICĂ CONDITIONALĂ*/ ) { //exemple: is_home() sau is_single() sau is_user_logged_in() sau isset($_SESSION['some_var'])

        wp_redirect( /*URL SPECIFIC*/ );

        exit();
    }
}
add_action( 'template_redirect', 'wpse101952_redirect' );

În al doilea rând, se pune întrebarea dacă aceasta este abordarea corectă pentru cazul tău, dar pentru a decide asta ar trebui să explici mai detaliat ce încerci să realizezi.


edit:

Funcția get_post_type_archive_link() îți oferă permalink-ul complet, nu este nevoie să adaugi http:// și ?post_type=property:

   wp_redirect( $redirecturl . "?search_keyword=" . $search_keyword );
5 iun. 2013 16:06:47
0

Rulezând ceva similar cu codul tău, primesc această avertizare în jurnalul de erori:

Warning: Cannot modify header information - headers already sent by (output started at /xxx/wordpress/wp-content/themes/balance/functions.php:4) in /xxx/wordpress/wp-includes/pluggable.php on line 876

Când am folosit acest cod pentru test:

$redirecturl = 'google.com';
wp_redirect( 'http://' .  $redirecturl );
exit;

Totul funcționează corect, așa că poți încerca:

$redirecturl = get_post_type_archive_link( 'property' );
wp_redirect( 'http://' .  $redirecturl . '?post_type=property&search_keyword=' . $search_keyword );
exit;

Codul exit este recomandat în Referința de Funcții.

5 iun. 2013 16:18:06