2010-11-24 25 views
0

Je travaille sur un thème qui permet aux utilisateurs enregistrés de poster sur un blog Wordpress, j'ai créé un formulaire (titre, catégorie, entrée).

La question est, comment puis-je ajouter une nouvelle case à cocher "M'avertir quand une nouvelle réponse est postée"? J'ai besoin d'une fonction, pas d'un plugin.

Voici la fonction qui gère l'affichage de la question:

post_new_question fonction

($ 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: Utilisation de la fonction wp_email serait génial.

Répondre

1

Ok donc, on y va:

Dans la forme où vous l'utilisateur d'ajouter le poste, j'ajouté

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

Puis, dans l'en-tête

$notify = $_POST['notify']; 

Maintenant, dans le fonction qui gère le formulaire et insérer le poste dans wpdb

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

Et la dernière chose que, pour la fonction qui gère les commentaires, après le commentaire est ajouté:

$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; 

Et cela fonctionne comme un charme. Peut-être que quelqu'un trouve cela utile. Merci dirk pour votre aide.

0

Vous devez d'abord récupérer le champ post_author de la base de données pour ce message. Recherchez l'enregistrement de la base de données pour cet auteur/utilisateur, sortez l'e-mail de cet enregistrement et envoyez un e-mail avec une notification d'une nouvelle réponse à cette adresse e-mail. La fonction WordPress get_userdata prend un ID utilisateur (du champ post_author) et renvoie un objet avec des informations sur l'utilisateur, y compris son adresse e-mail.

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

qui saisira l'auteur du poste actuel et de les envoyer un e-mail avec le sujet « Nouvelle réponse sur le Post: [Nom du Post] » et le corps du message étant l'URI pour le poste.

+0

Merci, mais comment vérifier si l'utilisateur a vérifié s'il veut ou non être averti? Et où cherche-t-on une nouvelle réponse sur ce poste spécifique? –

+1

Pour les notifications, vous devez utiliser post meta ou une table personnalisée dans la base de données pour stocker cette préférence. Vous pouvez utiliser le système de commentaires et faire réagir les commentaires, puis relier le système d'actions pour qu'une fonction soit exécutée lorsqu'un nouveau commentaire est posté pour vérifier si l'utilisateur souhaite recevoir un e-mail et s'il a effectivement envoyé cet e-mail. – dirk

+0

Eh bien les commentaires agissent comme des réponses. Je vais faire une nouvelle table, wp_notify et je vais stocker user_id et post_id (s'ils voulaient être notifiés) non? Mais j'ai besoin d'un exemple de comment vérifier si une nouvelle réponse est postée sur cette entrée. Merci. –