2010-11-24 6 views
0

Ich arbeite an einem Thema, das registrierten Benutzern ermöglicht, auf einem Wordpress Blog zu veröffentlichen, ich habe ein Formular erstellt (Titel, Kategorie, Eintrag).

Die Frage ist, wie kann ich ein neues Kontrollkästchen "Benachrichtigen Sie mich, wenn neue Antwort gepostet wird" hinzufügen? Ich brauche eine Funktion, kein Plugin.

Hier ist die Funktion, die die Frage Entsendung Griffe:

Funktion post_new_question (question_title $, $ question_content, $ question_category) {

$question_title_stripped = strip_tags($question_title); 
$question_content_stripped = strip_tags($question_content); 

$user = wp_get_current_user(); 

global $wpdb; 
$gather_questions = "SELECT * FROM wp_posts WHERE post_author = '" . $user->ID . "'"; 
$user_questions = $wpdb->get_results($gather_questions); 

if (isEmptyString($question_title_stripped)) return new WP_Error('no_title_entered', 'Enter a title for your quesion'); 
if (isEmptyString($question_content_stripped)) return new WP_Error('no_content', 'Enter a breif description for your quesion'); 

foreach ($user_questions as $user_question) { 
    if ($user_question->post_author == $user->ID) { 
    if ($user_question->post_title == $question_title_stripped) { 
    return new WP_Error('duplicate_user_question', 'You have already asked this exact question.'); 
    } else {} 
    } else {} 
} 

$question_author = $user->ID; 

$post = array(
    'ID' => '', 
    'post_author' => $question_author, 
    'post_category' => array($question_category), 
    'post_content' => $question_content_stripped, 
    'post_title' => $question_title_stripped, 
    'post_status' => 'publish' 
); 

$question_id = wp_insert_post($post); } 

PS: Verwendung von wp_email Funktion wäre toll.

Antwort

1

Ok so, hier gehen wir:

In dem Formular, in dem Sie der Benutzer den Eintrag hinzufügen, fügte ich

<input class="checkbox" type="checkbox" value="yes" name="notify" checked="checked" /> 

Dann im Header

$notify = $_POST['notify']; 

nun in der Funktion, die das Formular behandelt und den Beitrag in wpdb

if ($notify) { 
     $wpdb->insert('wp_notify', array('user_id' => $question_author, 'post_id' => $question->ID), array('%d', '%d')); 
    } 
einfügen

Und das letzte, was für die Funktion, die die Kommentare behandelt, nachdem der Kommentar hinzugefügt:

$notify = $wpdb->get_col("SELECT user_id FROM wp_notify WHERE user_id = {$wp_query->post->post_author} AND post_id = {$wp_query->post->ID}"); 

    foreach ($notify as $user) : 
     if($user == $wp_query->post->post_author && $user != $user_ID) { 
      wp_mail('email', 'New Answer on Post: asdasdasdas', 'google.ro'); 
     } 
    endforeach; 

Und es wirkt wie ein Zauber. Vielleicht findet jemand das nützlich. Danke Dirk für Ihre Hilfe.

0

Zuerst müssen Sie das Feld post_author aus der Datenbank für diesen Beitrag greifen. Suchen Sie den Datenbankeintrag für diesen Autor/Benutzer, ziehen Sie die E-Mail aus diesem Datensatz und senden Sie eine E-Mail mit einer Benachrichtigung über eine neue Antwort an diese E-Mail-Adresse. Die WordPress-Funktion get_userdata nimmt eine Benutzer-ID (aus dem Feld post_author) und gibt ein Objekt mit Informationen über den Benutzer einschließlich seiner E-Mail-Adresse zurück.

global $post; 
$user = get_userdata($post->post_author); 
wp_mail($user->user_email, 'New Answer on Post: '.$post->post_title, get_permalink($post->ID)); 

, dass der Autor des aktuellen Post packen wird und ihnen eine E-Mail mit dem Betreff „Neue Antwort auf Beitrag: [Name des Post]“ senden und den Nachrichtentext für den Posten ist, um die URI.

+0

Danke, aber wie überprüft man, ob der Benutzer überprüft hat, ob er benachrichtigt werden möchte oder nicht? Und wo sieht es nach einer neuen Antwort auf diesen speziellen Beitrag aus? –

+1

Für Benachrichtigungen müssen Sie entweder post-meta oder eine benutzerdefinierte Tabelle in der Datenbank verwenden, um diese Einstellung zu speichern. Sie könnten das Kommentarsystem verwenden und Kommentare als Antworten verwenden und dann in das Aktionssystem einbinden, um eine Funktion auszuführen, wenn ein neuer Kommentar gepostet wird, der prüft, ob der Benutzer eine E-Mail erhalten möchte und ob er diese E-Mail gesendet hat. – dirk

+0

Nun eigentlich Kommentare wirken wie Antworten. Ich werde eine neue Tabelle erstellen, wp_notify und ich werde user_id und post_id speichern (wenn sie benachrichtigt werden wollten) oder? Aber ich brauche ein Beispiel, wie überprüft werden kann, ob eine neue Antwort auf diesen Eintrag gepostet wird. Vielen Dank. –

Verwandte Themen