wake-up-neo.net

Wenn ein Benutzer einen Beitrag erstellt (ausstehend), senden Sie einen Bestätigungslink, über den er veröffentlichen kann

Ich habe noch eine Frage an euch!

Ich brauche folgendes:

  1. Benutzer erstellt Beitrag (setzt ihn automatisch auf zur Genehmigung anstehend)
  2. Senden Sie dem Benutzer eine E-Mail mit einem Bestätigungslink
  3. Der Benutzer klickt auf den Link
  4. Die Beiträge werden auf genehmigt gesetzt und automatisch veröffentlicht

Wie kann das geschaffen werden? Gibt es in Wordpress Hooks, um einen solchen Bestätigungslink zu erstellen?

3
Cas

Sie benötigen eine Funktion, die sich in Post-Status-Übergänge einhakt und eine Verknüpfung mit einigen Überprüfungsvariablen sowie eine Funktion, die diese Variablen verwendet, per E-Mail versendet und überprüft, ob alle in Ordnung sind, um den Post-Status zu aktualisieren.

Der folgende Code ist meines Erachtens selbsterklärend, und Kommentare bieten zusätzliche Hilfe:

add_action('new_to_pending', 'send_approve_link');
add_action('draft_to_pending', 'send_approve_link');
add_action('auto-draft_to_pending', 'send_approve_link');
add_action('init', 'approve_post');

function set_html_content_type() { return 'text/html'; }

function send_approve_link( $post ) {
  // get author of post
  $author = new WP_User($post->post_author);
  // create a key for security check and save as meta
  $check = md5( $author->user_email . $post->ID  );
  update_post_meta( $post->ID, '_approve_key', $check);
  // set the content for the email
  $content = '<p>Please click following link to allow the publishing of your post: &quot;';
  $content .= esc_html( get_the_title($post->ID) ) . '&quot;</p>';
  // create an url vor verify link with some variables: key, post id, and email
  $url = add_query_arg( array('email'=>$author->user_email,'approve'=>$post->ID), site_url() );
  $content .= '<p><a href="' . $url . '">Click to Confirm</a></p>';
  $from = get_bloginfo('name');
  $from_email = get_option('admin_email');
  $headers = 'From: ' . $from . ' <' . $from_email . '>' . "\r\n";
  // sending email in html format
  add_filter( 'wp_mail_content_type', 'set_html_content_type' );
  wp_mail( $author->user_email, 'Confirm your Post', $content, $headers);
  remove_filter( 'wp_mail_content_type', 'set_html_content_type' );
}

function approve_post( ) {
  if ( isset($_GET['approve']) && isset($_GET['email']) ) {
    // have we all variable needed?
    if ( empty($_GET['approve']) || ! filter_var($_GET['email'], FILTER_VALIDATE_EMAIL) ) return;
    // get post
    $post = get_post($_GET['approve']);
    // this post has an author?
    if ( ! isset($post->post_author) ) return;
    // is the post already published?
    if ( $post->post_status == 'publish' ) {
      wp_redirect( get_permalink($post->ID) );
      exit();
    } elseif ( $post->post_status != 'pending' ) { // was the post deleted by admin?
      return;
    }
    // get the author
    $author = new WP_User($post->post_author);
    // check author variable
    if ( ! isset($author->user_email) ) return;
    // verify email
    if ( $_GET['email'] != $author->user_email ) return;
    // verify key
    $key = get_post_meta( $post->ID, '_approve_key', true);
    if ( $key != md5( $author->user_email . $post->ID ) ) return;
    // ok, update status
    $post_data = array('ID' => $post->ID, 'post_status' => 'publish');
    $update = wp_update_post($post_data);
    // update failed...
    if ( ! $update ) return;
    // delete verify key
    delete_post_meta($post->ID, '_approve_key');
    // work finished, view the post
    wp_redirect( get_permalink($post->ID) );
    exit();
  }
}

Das ist alles. Bitte beachten Sie, dass der Code ungetestet ist.

4
gmazzap