Funcția wp_redirect() nu funcționează

21 mar. 2012, 16:31:50
Vizualizări: 122K
Voturi: 12

wp_redirect($post->guid) nu funcționează. Cum pot repara acest lucru?

Acesta este codul meu:

if(isset($_REQUEST['vid']) ){

    $id=$_REQUEST['vid'];

    $post_title = 'sasa';

    $post_content ='zxczxczxc';

    $new_post = array(
      'ID' => '',
      'post_author' => $user->ID, 
      'post_content' => $post_content,
      'post_title' => $post_title,
      'post_status' => 'publish',
      // ACUM ESTE DEJA UN ARRAY

    );

    $post_id = wp_insert_post($new_post);

    // Aceasta te va redirecționa către postarea nou creată
    $post = get_post($post_id);
    $url=$post->guid;

    wp_redirect($post->guid);

} 
0
Toate răspunsurile la întrebare 9
6
29

Două probleme aici:

  1. Nu folosi $post->guid ca URL
  2. Trebuie neapărat să folosești exit() după wp_redirect() (vezi Codex)

wp_redirect() nu se încheie automat și ar trebui aproape întotdeauna urmat de exit. Pentru a redirecționa către pagina noului post:

//..... cod ca în întrebare
$post_id = wp_insert_post($new_post);
$url = get_permalink( $post_id );
wp_redirect($url);
exit();
21 mar. 2012 16:44:52
Comentarii

Te-am bătut cu 30 de secunde :D

soulseekah soulseekah
21 mar. 2012 16:45:19

nu funcționează, dacă rulez pagina consola arată 302 Found 479ms jquery...r=1.7.1 (linia 4) GET http://localhost/wordpress/newpages-17/

200 OK 1.2s încărcare..........

SANS780730 SANS780730
21 mar. 2012 16:51:56

Este o eroare JS. Nu are legătură cu wp_redirect. Răspunsul de mai sus este modul corect de a face acest lucru, deci probabil faci altceva greșit.

Stephen Harris Stephen Harris
21 mar. 2012 17:00:46

sorry.it afișează doar GET localhost/wordpress/newpages-17 200 OK 1.2s încărcare..........

SANS780730 SANS780730
21 mar. 2012 17:04:01

@StephenHarris ai putea, te rog, să arunci o privire peste întrebarea mea despre redirecționare la http://wordpress.stackexchange.com/q/76991/10413 Am încercat și codul tău din acest răspuns folosind $pid, dar tot nu funcționează. Mulțumesc

Anagio Anagio
22 dec. 2012 19:33:49

Această întrebare primește un număr foarte mare de vizualizări, așa că te rog să iei în considerare acceptarea acestui răspuns dacă ți-a rezolvat problema. Astfel, întrebarea va apărea ca răspunsul și ne va ajuta să menținem site-ul ordonat. Mulțumesc.

Andy Macaulay-Brook Andy Macaulay-Brook
23 iul. 2016 18:06:47
Arată celelalte 1 comentarii
6
14

Am o soluție simplă, te rog citește:

  1. Dacă folosești wp_redirect($url) în fișierele de temă și nu funcționează, adaugă ob_clean() ob_start() în fișierul tău de funcții în partea de sus.

  2. Dacă folosești într-un plugin, adaugă ob_clean() ob_start() în fișierul principal al pluginului în partea de sus.

Și asigură-te că ai adăugat exit() după wp_redirect($url) Astfel:

$url = 'http://example.com';
wp_redirect($url);
exit();
10 dec. 2015 07:16:25
Comentarii

Acest lucru rezolvă problema cu Mozilla Firefox care returnează 200 în loc de 302 pentru redirecționare. Chrome face redirecționarea în timp ce Firefox nu. Această remediere ajută. Mulțumesc!

El'Magnifico El'Magnifico
12 sept. 2018 16:36:49

Acesta este un răspuns mai detaliat dacă creezi un plugin sau proiectezi un șablon. A funcționat pentru mine.

Sayed Mohd Ali Sayed Mohd Ali
10 iul. 2019 11:43:04

M-am chinuit să fac asta să funcționeze în tema mea personalizată... Funcționează perfect...

ShivangiBilora ShivangiBilora
8 oct. 2019 13:24:54

Rețineți, așa cum s-a menționat într-un alt răspuns, că pe șabloane trebuie să faceți verificarea autentificării și redirecționarea înainte de funcția 'get_header()', sau să plasați funcția de verificare a autentificării în add_filter('init','mylogincheck') în șablonul dumneavoastră. Altfel, va apărea o eroare 'headers already sent' care s-ar putea să nu apară în jurnalul de erori (în funcție de setările de eroare).

Rick Hellewell Rick Hellewell
27 mar. 2022 23:46:26

A funcționat! Din politețe față de alți dezvoltatori, asigurați-vă că apelați ob_clean a doua oară. ob_clean();ob_start(); /*plugin code*/ ob_clean();

wizardzeb wizardzeb
30 iun. 2022 04:36:31

Dacă utilizați într-un plugin, adăugați ob_clean() ob_start() în fișierul principal al pluginului în partea de sus. Acest cod a funcționat doar pentru mine.

M.Idrish M.Idrish
27 feb. 2023 11:24:12
Arată celelalte 1 comentarii
3

Nu sunt sigur dacă asta va ajuta... dar am descoperit că aveam niște cod într-un șablon și începeam cu get_header() în felul următor:

<?php
/**
 * .. Comentarii pentru șablon
 */

 get_header();

 if(...) {
    ...
    if(...) {
      ...
      wp_redirect($url);
      exit();
    }
 }
 ?>

și primeam aceeași eroare de header trimis anterior... Ce am făcut a fost să mut get_header() la sfârșitul blocului și voila!!!

<?php
/**
 * .. Comentarii pentru șablon
 */


 if(...) {
    ...
    if(...) {
      ...
      wp_redirect($url);
      exit();
    }
 }
 get_header();
 ?>

Niciun plugin nu a fost dezactivat. și totul a funcționat... poți încerca dacă funcționează și pentru tine

1 mai 2013 20:53:18
Comentarii

Aceasta este o metodă bună de a face acest lucru, dacă ai acces la codul sursă al temei. Redirectările ar trebui să ruleze înainte de apelul către get_header.

s_ha_dum s_ha_dum
1 mai 2013 21:28:32

eliminarea funcției get_header() a funcționat și pentru mine!

Magico Magico
31 oct. 2014 12:01:31

Pun pariu că aceasta este cauza cea mai comună pentru majoritatea oamenilor care se luptă cu problema wp_redirect care nu funcționează

joehanna joehanna
25 feb. 2019 07:53:49
2

Niciodată nu folosiți valoarea GUID a postării, aceasta nu trebuie să corespundă cu URL-ul real al postării.

http://codex.wordpress.org/Changing_The_Site_URL#Important_GUID_Note

wp_redirect( get_permalink( $post_id ) );
exit(); // întotdeauna folosiți exit()

De asemenea, asigurați-vă că wp_redirect nu este blocat de altceva care îi împiedică funcționarea corectă. Dezactivați toate plugin-urile și reveniți la tema Twenty Ten/Eleven pentru a verifica.

21 mar. 2012 16:44:21
Comentarii

+1 bun punct cu wp_redirect fiind pluggable

Stephen Harris Stephen Harris
21 mar. 2012 16:47:17

îți mulțumesc....

SANS780730 SANS780730
21 mar. 2012 18:49:04
1

Am avut aceleași probleme aici, Am încercat diverse metode precum

add_action( 'init', 'my_function_name'); sau add_action( 'wp_head', 'my_function_name'); dar nu funcționează

în final am găsit un hook care funcționează perfect pentru redirecționare, mai jos codul meu complet în functions.php

function redirect_homepage(){
    ob_clean();
    ob_start();
    $args = array(
        'public'   => true,
        '_builtin' => false,
     );
    
     $output = 'names'; // names sau objects, implicit este names
     $operator = 'and'; // 'and' sau 'or'
    
     $post_types = get_post_types( $args, $output, $operator ); 
        if(is_singular($post_types)){

            $url = get_bloginfo('url');
            wp_redirect($url, '301');
            exit();
    }
}
add_action( 'template_redirect', 'redirect_homepage');

folosește simplu hook-ul add_action( 'template_redirect', 'my_function_name');

Notă: folosesc un child-theme

7 mar. 2021 06:25:11
Comentarii

Mulțumesc FOARTE mult! Am încercat multe combinații cu wp_redirect, exit, die, header. Ajută ob_clean(); ob_start(); la început!

Galina Bublik Galina Bublik
13 sept. 2022 08:46:25
0

header deja trimis este principala cauză. Deoarece header-ul a fost deja trimis, nu poate fi retrimis și redirecționarea eșuează. Folosește înainte de header, ca în hook-ul init.

add_action('init', 'your_app_function');
22 iul. 2020 10:57:19
0

Asigurați-vă că nu aveți: get_header(); sau orice altă funcție WordPress care poate crea conținut precum antetul sau subsolul în șablonul vostru. În caz contrar, redirecționarea nu va funcționa.

Unii dezvoltatori încearcă să curețe pagina folosind ob_start();, dar dacă aveți conținut pe pagină, chiar dacă utilizați ob_start();, redirecționarea nu va funcționa.

Și apoi încercați pur și simplu acest cod:

wp_redirect(get_permalink($post->ID));
exit;
16 ian. 2019 23:33:18
1
if( is_page( ['wfp-dashboard', 'wfp-checkout'] ) ){
   if(!is_user_logged_in()){
      @ob_flush();
      @ob_end_flush();
      @ob_end_clean();
      wp_redirect( wp_login_url() );
      exit();
   }
}
6 aug. 2019 09:28:06
Comentarii

Poți include o explicație despre cum rezolvă această problemă? Nu sunt sigur de ce există bufferi de ieșire în cod și de ce folosesc operatorul @, @ nu previne erorile, doar le ascunde din jurnalul de erori

Tom J Nowell Tom J Nowell
22 iul. 2020 11:53:14
0

Am observat că plugin-ul W3 Total Cache trebuie să fie activ pentru ca aceasta să funcționeze. Din anumite motive, l-a dezactivat pe al meu.

wp_redirect("/");
exit;
28 dec. 2022 19:53:38