Wie erzeuge ich die ablaufende URL?

Ich habe einen benutzerdefinierten Beitragstyp Portfolio und jedes Portfolio ist ein Fragebogen. Wenn ich den Link eines Portfolios per E-Mail an einen Kunden sende.

Wie kann ich den Link nach 10 Minuten ablehnen, also wenn der Client nach 10 Minuten gekommen ist, um den Link zu besuchen Dann sollte es eine Nachricht geben, dass der Link abgelaufen ist Bitte versuchen Sie es erneut.

Wie kann ich das machen?

Solutions Collecting From Web of "Wie erzeuge ich die ablaufende URL?"

Ok, ich habe das erfunden

 add_action( 'wp_loaded', 'my_create_questionnaire_link'); function my_create_questionnaire_link(){ // this check is for demo, if you go to http://yoursite.demo/?create-my-link, you will get your unique url added to your content if( isset( $_GET['create-my-link'] ) ){ // This filter is for demo purpose // You might want to create a button or a special page to generate your // unique URL add_filter( 'the_content', function( $content ){ // This is the relevant part // This code will create a unique link containing valid period and a nonce $valid_period = 60 * 10; // 10 minutes $expiry = current_time( 'timestamp', 1 ) + $valid_period; // current_time( 'timestamp' ) for your blog local timestamp $url = site_url( '/path/to/your/portfolio/page' ); $url = add_query_arg( 'valid', $expiry, $url ); // Adding the timestamp to the url with the "valid" arg $nonce_url = wp_nonce_url( $url, 'questionnaire_link_uid_' . $expiry, 'questionnaire' ); // Adding our nonce to the url with a unique id made from the expiry timestamp // End of relevant part // now here I return my nounce to the content of the post for demo purposed // You would use this code when a button is pressed or when a special page is visited $content .= $nonce_url; return $content; } ); } } 

Hier würden Sie nach der Gültigkeit der eindeutigen URL suchen

 add_action( 'template_redirect', 'my_url_check' ); function my_url_check(){ if( isset( $_GET['questionnaire'] )){ // if the nonce fails, redirect to homepage if( ! wp_verify_nonce( $_GET['questionnaire'], 'questionnaire_link_uid_' . $_GET['valid'] ) ){ wp_safe_redirect( site_url() ); exit; } // if timestamp is not valid, redirect to homepage if( $_GET['valid'] < current_time( 'timestamp', 1) ){ wp_safe_redirect( site_url() ); exit; } // Show your content as normal if all verification passes. } } 

Sie könnten eine benutzerdefinierte Abfragevariable mit dem Zeitstempel hinzufügen.

 eg. example.com/portfolio?exp=12345678 

Wenn ein Benutzer auf dieser URL landet, können Sie die aktuelle Uhrzeit anhand des Zeitstempels überprüfen. Wenn 10 Minuten vergangen sind oder nicht, können Sie verschiedene Dinge auf der Seite ausgeben.

Sie könnten sogar einen bestimmten Zeitstempel speichern, um zu wissen, welcher Kunde welches Formular / Zeitstempel erhalten hat.

AKTUALISIEREN

Wie Bynicolas bemerkt hat, könnte der Client technisch einen Zeitstempel der aktuellen Zeit erzeugen und auf die Verbindung erneut zugreifen.

Sie sollten also in Betracht ziehen, diesen Zeitstempel 10 Minuten lang als Transient zu speichern.

Wenn der Client die URL besucht, müssen Sie überprüfen, ob dieser Transient mit dem Zeitstempel abgelaufen ist .

Nur eine Idee.

Hier ist eine Idee: Hook für die Aktion template_redirect :

https://codex.wordpress.org/Plugin_API/Action_Reference/template_redirect

An dieser Stelle können Sie das $ post-Objekt untersuchen, um sicherzustellen, dass es den Typ Ihres CPT ( $post->post_type ) hat, und den Zeitstempel ( $post->post_date ) $post->post_date . Wenn die aktuelle Systemzeit länger als 10 Minuten ist, leiten Sie den Benutzer an die gewünschte URL weiter.

Wahrscheinlich möchten Sie auch eine Art “Garbage Collection” für abgelaufene CPTs durchführen. Löschen Sie diese abgelaufenen Posts, damit Ihre database nicht mit unnötigem Inhalt gefüllt wird.