‘Konflikt’ mit Aktion deleted_post und is_admin ()

Ich habe am Frontend eine Löschtaste für Blogposts und benutzerdefinierte Posts erstellt und ich würde nach dem Löschen auf eine bestimmte Seite redirect, ich habe mich auf Google umgeschaut und ich fand alle Lösungen wie folgt:

add_action('deleted_post', 'my_trashed_post_handler', 10); function my_trashed_post_handler($post_id) { wp_redirect( get_option('siteurl') ); exit; } 

Der Code funktioniert gut, aber ich möchte das Standardverhalten des Backends nicht ändern, also habe ich es auf diese Weise gemacht:

 add_action('deleted_post', 'woffice_trashed_post_handler', 10); function woffice_trashed_post_handler($post_id) { if(!is_admin()) { wp_redirect( get_option('siteurl') ); exit; } } 

Dieser Code funktioniert nicht, weil ich festgestellt habe, dass is_admin return immer true ist, auch wenn ich einen Beitrag am Frontend lösche.

Um den Löschlink nach Frontend zu erstellen benutze ich diese function:

 get_delete_post_link(get_the_ID(); 

Wie kann ich es lösen und auf eine bestimmte Seite redirect, nachdem ich einen Beitrag nur am Frontend oder nur über einen bestimmten Link / Button gelöscht habe?

UPDATE: Dank der Antwort von zlatev kann ich es auslösen und das is_admin Problem vermeiden, jetzt habe ich ein anderes, sehr seltsames Problem:

  1. Ich erstelle einen neuen Beitrag
  2. Ich öffne es und ich klicke auf “Löschen”
  3. Ich werde auf die Blog-Eintragsseite umgeleitet (meine benutzerdefinierte Edirect-URL)
  4. Der Beitrag wird nicht gelöscht
  5. Ich hoffe der Beitrag nochmal und ich klicke nochmal Löschen von Frontend
  6. Ich werde auf dieselbe Seite weitergeleitet
  7. Der Beitrag wird beim zweiten Mal gelöscht

Ich habe es viele Male getestet und es wird immer beim zweiten Mal gelöscht, ich erstelle die Lösch-URL mit dieser und die URL ist immer die gleiche:

 add_query_arg( 'origin', 'fe-blog', get_delete_post_link(get_the_ID(), '', true)) 

Der Code, den ich für rdirect verwende, ist folgender:

 add_action('deleted_post', 'woffice_trashed_post_handler'); function woffice_trashed_post_handler() { if( isset( $_GET['origin'] ) && ($_GET['origin'] == 'fe-blog' || $_GET['origin'] == 'fe-wiki' || $_GET['origin'] == 'fe-project') ) { switch($_GET['origin']){ case 'fe-blog': $blog_page = get_option( 'page_for_posts' ); if(empty($blog_page)){ $pages = get_pages(array( 'meta_key' => '_wp_page_template', 'meta_value' => 'page-templates/blog.php' )); $blog_page = $pages[0]->ID; } //var_dump(get_permalink($blog_page)); //die(); wp_redirect( get_permalink($blog_page) ); break; } exit(); } } 

Ich benutze einen falschen Haken?

Solutions Collecting From Web of "‘Konflikt’ mit Aktion deleted_post und is_admin ()"

Was noch wichtiger ist, Sie sollten feststellen, welcher Link von get_delete_post_link() . Es ist ein Admin-Link is_admin() Check wird immer true . Stattdessen brauchen Sie etwas anderes, das hilft, die Anfrage zu erfüllen. Versuchen Sie, arg zu Ihrem Löschen-Link hinzuzufügen und abzufragen.

 add_query_arg( 'origin', 'fe', get_delete_post_link( get_the_ID() ) ); 

dann in der Aktion

 add_action('deleted_post', 'woffice_trashed_post_handler', 10); function woffice_trashed_post_handler($post_id) { if( isset( $_POST['origin'] ) && $_POST['origin'] == 'fe' ) { wp_redirect( get_option('siteurl') ); exit; } }