it-swarm.com.de

Wie erstelle ich eine 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 ablaufen lassen? Wenn der Client nach 10 Minuten gekommen ist, um den Link zu besuchen, sollte eine Meldung angezeigt werden, dass der Link abgelaufen ist. Bitte versuchen Sie es erneut.

Wie kann ich das machen?

5
File_Submit

Ok, das habe ich mir ausgedacht

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 überprüfen Sie die Gültigkeit der eindeutigen URL

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.
  }
}
4
bynicolas

Sie können eine benutzerdefinierte Abfrage var mit dem Zeitstempel hinzufügen.

eg. example.com/portfolio?exp=12345678

Wenn ein Benutzer auf dieser URL landet, können Sie die aktuelle Zeit mit dem Zeitstempel vergleichen. Wenn 10 Minuten vergangen sind oder nicht, können Sie verschiedene Dinge auf der Seite ausgeben.

Sie können sogar einen bestimmten Zeitstempel speichern, um zu erfahren, welcher Client welches Formular/welchen Zeitstempel hat.

UPDATE

Wie bynicolas bemerkt hat, könnte der Client technisch gesehen einen Zeitstempel für die aktuelle Zeit generieren und erneut auf den Link zugreifen.

Vielleicht möchten Sie diesen Zeitstempel für 10 Minuten als Übergang speichern.

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

Nur eine Idee.

1
The J

Hier ist eine Idee: Haken Sie an der Aktion template_redirect an:

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

Zu diesem Zeitpunkt 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) abrufen. Wenn die aktuelle Systemzeit> 10 Minuten nach der Post-Zeit liegt, leiten Sie den Benutzer zu Ihrer gewünschten URL weiter.

Wahrscheinlich möchten Sie auch bei abgelaufenen CPTs eine Art "Garbage Collection" durchführen. Löschen Sie diese abgelaufenen Posts, damit Ihre Datenbank nicht mit unnötigem Inhalt gefüllt wird.

0
C C