انجمن


فرستادن ایمیل به همه کاربران  (۲۴ نوشته)

  • webi

    آفلاین
    عضو
    تعداد نوشته‌ها: ۶
    # نوشته شده: ۹ سال پیش
    ۲۲ مرداد ۱۳۹۰ - ۱۸:۳۵

    سلام دوستان من یک کد پیدا کردم که کارش فرستادن ایمیل بعد از هر پست جدیده.
    فقط publish_post در ورد پرس 3.2 به {$new_status}_{$post->post_type} تغییر پیدا کرده که من نمی فهمم یعنی چی لینک توضیحاتش اینجاست
    برای دیدن لینک از ف ی ل ت ر ش ک ن استفاده کنید چون ای پ ایران تو این سایت حذف شده !
    کد هم اینه لطفا راهنمایی کنید که بسیار ممنون میشم .

    function email_members($post_ID)  {
        global $wpdb;
        $usersarray = $wpdb->get_results("SELECT user_email FROM $wpdb->users;");
        $users = implode(",", $usersarray);
        mail($users, "New WordPress recipe online!", 'A new recipe have been published on http://www.example.com');
        return $post_ID;
    }
    
    add_action('publish_post', 'email_members');
  • Parsa

    آفلاین
    عضو فعال
    تعداد نوشته‌ها: ۱۹۲۱
    تشکر شده: ۲۶۸۳ بار
    # نوشته شده: ۹ سال پیش
    ۲۲ مرداد ۱۳۹۰ - ۱۹:۰۱

    شما مشكلتون رو نگفتيد!؟

    اين كد تا جايي كه من ميدونم كار ميكنه
    و اصلا تغييري نكرده. شكل هوك، يك شكل ثابت هست و داخلش از علامت استفاده نميشه
    فكر كنم تست هم نكرديد!

    در ضمن سوالتون رو نياز نيست 2 يا چند بار مظرح كنيد

    کاربران زیر به‌خاطر این نوشته تشکر کرده‌اند:
    webi
  • webi

    آفلاین
    عضو
    تعداد نوشته‌ها: ۶
    # نوشته شده: ۹ سال پیش
    ۲۲ مرداد ۱۳۹۰ - ۱۹:۱۰

    اولا معذرت بابت دو جا پست کردن
    من این کد رو تو functions.php چسبوندم که خطا داد.
    بعد یه جا خوندم که
    publish_post
    دیگه ساپورت نمیشه توی ورژن 3.2
    حالا می خوام اگه می شه راهنمایی کنید که اگه کار می کنه کجا استفاده کنم و چطوری که کار کنه.
    ممنونم

  • Parsa

    آفلاین
    عضو فعال
    تعداد نوشته‌ها: ۱۹۲۱
    تشکر شده: ۲۶۸۳ بار
    # نوشته شده: ۹ سال پیش
    ۲۲ مرداد ۱۳۹۰ - ۱۹:۳۶

    چه خطايي؟
    بهتره به جاي تابع mail از wp-mail استفاده كنيد

  • webi

    آفلاین
    عضو
    تعداد نوشته‌ها: ۶
    # نوشته شده: ۹ سال پیش
    ۲۲ مرداد ۱۳۹۰ - ۱۹:۴۸

    Catchable fatal error: Object of class stdClass could not be converted to string in /home/------/public_html/wp-content/themes/ahimsa/functions.php on line 1024
    خطا اینه
    راهنمهیی شما رو هم انجام دادم باز نشد.

  • Parsa

    آفلاین
    عضو فعال
    تعداد نوشته‌ها: ۱۹۲۱
    تشکر شده: ۲۶۸۳ بار
    # نوشته شده: ۹ سال پیش
    ۲۲ مرداد ۱۳۹۰ - ۲۰:۳۳

    function email_members($post_ID)  {
        global $wpdb;
        $usersarray = $wpdb->get_results("SELECT user_email FROM $wpdb->users;");
        foreach($usersarray as $user){
    	$users .= $user->user_email . ",";
        }
        mail($users, "New WordPress recipe online!", 'A new recipe have been published on http://www.example.com');
        return $post_ID;
    }
    کاربران زیر به‌خاطر این نوشته تشکر کرده‌اند:
    webi
  • webi

    آفلاین
    عضو
    تعداد نوشته‌ها: ۶
    # نوشته شده: ۹ سال پیش
    ۲۲ مرداد ۱۳۹۰ - ۲۰:۵۲

    مرسی.عالی کار می کنه
    فقط from ایمیل آدرس dns سایتمه که به کاربرها فرستاده میشه!!!!!!!!!!!!!! .
    اینجوری
    from:example@ns1.uage.net
    چطور from را عوض کنم.

  • webi

    آفلاین
    عضو
    تعداد نوشته‌ها: ۶
    # نوشته شده: ۹ سال پیش
    ۲۲ مرداد ۱۳۹۰ - ۲۱:۰۹

    راستی از شما واقعا تشکر می کنم.

    بهترین چیزها تو این دنیا مجانی اند.

    یکیش همین راهنمایی های شماست. بازم تشکر.

  • Parsa

    آفلاین
    عضو فعال
    تعداد نوشته‌ها: ۱۹۲۱
    تشکر شده: ۲۶۸۳ بار
    # نوشته شده: ۹ سال پیش
    ۲۳ مرداد ۱۳۹۰ - ۰۲:۵۷

    مثال:

    $message = "";
    $message .= "با سلام" . "\r\n\r\n";
    $message .= "شما توسط يكي از دوستانتان به وبسايت ... دعوت شده ايد." . "\r\n\r\n";
    $message .= "نشاني ورود: " . get_option('siteurl') . "\r\n\r\n";
    $subject = "دعوت يكي از دوستان به ...";
    $headers = 'From: ... - سايت <mymail@sdsd.com>' . "\r\n";
    add_filter('wp_mail_content_type',create_function('', 'return "text/html"; '));
    wp_mail($email, $subject, $message, $headers);

    ضمنا اگر ميخوايد هاستتون ساسپند نشه افزونه wp-mail-smtp را نصب و تنظيم كنيد
    با پشتيبان هاست هم تماس بگيريد بابت ايميل

    البته فيدبرنر بهترينه (:

  • Arash-GH

    آفلاین
    عضو
    تعداد نوشته‌ها: ۳۲
    تشکر شده: ۲۰ بار
    # نوشته شده: ۸ سال پیش
    ۲ بهمن ۱۳۹۰ - ۱۵:۰۰

    سلام دوست عزیز، ممنونم که این کد رو معرفی کردی ;)
    دوستان من این کد رو به این صورت در functions.php قرار دادم، اما عمل نکرد...
    چیزی رو از قلم انداختم؟؟!!

    function email_members($post_ID)  {
    	global $wpdb;
    require("class.phpmailer.php");
    $mail = new PHPMailer();
    $mail->SetLanguage("en", 'wp-content/phpmailer/language/');
    $mail->From = "Newsletter@labkhandezendegi.com";
    $mail->FromName = "NL labkhand";
    $mail->AddAddress("labkhand.zendegi@gmail.com","Labkhande Zendegi");
    $mail->AddReplyTo("Newsletter@labkhandezendegi.com","NL labkhand");
    $mail->WordWrap = 50; // set word wrap
    $mail->IsHTML(true); // send as HTML
    $mail->CharSet="utf-8";
    $mail->Subject=get_the_title();
    $mail->Body  = 'HTML';
    if(!$mail->Send())
    {
    }
    else
    {
    }
    	return $post_ID;
    }
    add_action('publish_post', 'email_members');
  • Parsa

    آفلاین
    عضو فعال
    تعداد نوشته‌ها: ۱۹۲۱
    تشکر شده: ۲۶۸۳ بار
    # نوشته شده: ۸ سال پیش
    ۲ بهمن ۱۳۹۰ - ۱۷:۳۹

    چرا مستقیم از php-mailer استفاده کردید؟!
    تابع wp_mail که ساده تر هست

    از ترکیب کد اولی که قرار دادم برای جمع آوری و کد دوم برای ارسال. میتوانید به تمام کاربران پیام ارسال کنید
    توصیه پست آخری فراموش نشه!

  • Arash-GH

    آفلاین
    عضو
    تعداد نوشته‌ها: ۳۲
    تشکر شده: ۲۰ بار
    # نوشته شده: ۸ سال پیش
    ۲ بهمن ۱۳۹۰ - ۲۲:۴۸

    سلام پارسا جان، ممنون دوست من،
    من تابع رو به شکل زیر تغییر دادم اما باز هم وقتی مطلب جدید انتشار می‌دم ایمیلی دریافت نمی‌کنم!
    کجای کار رو اشتباه انجام می‌دم... همه چیز به همین کد خلاصه می‌شه یا تنظیمات دیگه‌ای هم هست؟؟

    function email_members($post_ID)  {
    	global $wpdb;
    $headers = 'From: خبرنامه <newsletter@labkhandezendegi.com>' . "\r\n";
    $subject = get_the_title();
    $message = '<div>'.get_the_title().'</div><br /><div>'.get_the_content().'</div>';
    add_filter('wp_mail_content_type',create_function('', 'return "text/html"; '));
    wp_mail('labkhand.zendegi@gmail.com', $subject, $message, $headers);
    	return $post_ID;
    }
    add_action('publish_post', 'email_members');

    می‌خوام بعد از انتشار هر پست ، متن و عنوان همون پست که با توابع get_the_title و get_the_content فراخوانی می‌شن به صورت ایمیل به لیست ایمیل‌ها فرستاده بشه...
    وقتی تابع wp_mail رو به صورت دستی اجرا می‌کنم همه چیز عالیه، اما درمورد این تابع که قراره بعد از انتشار مطلب ایمیل ارسال کنه عمل نمی‌کنه...
    ممنون می‌شم یه بار دیگه کمکم کنی :)

  • Parsa

    آفلاین
    عضو فعال
    تعداد نوشته‌ها: ۱۹۲۱
    تشکر شده: ۲۶۸۳ بار
    # نوشته شده: ۸ سال پیش
    ۳ بهمن ۱۳۹۰ - ۱۲:۵۳

    add_action('publish_post', 'email_members');
    
    function email_members($post_ID)  {
        global $wpdb;
        $usersarray = $wpdb->get_results("SELECT user_email FROM $wpdb->users;");
        foreach($usersarray as $user){
    		$email .= $user->user_email . ",";
        }
    
    	$content_post = get_post($post_ID);
    	$content = $content_post->post_content;
    	$content = apply_filters('the_content', $content);
    	$content = str_replace(']]>', ']]>', $content);
    
    	$subject = get_the_title();
    	$message = '<div>'.get_the_title().'</div><br /><div>'.$content.'</div>';
    	$headers = 'From: خبرنامه <newsletter@labkhandezendegi.com>' . "\r\n";
    	add_filter('wp_mail_content_type',create_function('', 'return "text/html"; '));
        wp_mail($email, $subject, $message, $headers);
    
        return $post_ID;
    }
    کاربران زیر به‌خاطر این نوشته تشکر کرده‌اند:
    امین باقیات - Morteza - Arash-GH
  • Arash-GH

    آفلاین
    عضو
    تعداد نوشته‌ها: ۳۲
    تشکر شده: ۲۰ بار
    # نوشته شده: ۸ سال پیش
    ۳ بهمن ۱۳۹۰ - ۲۲:۳۶

    ممنونم پارسا جان عالی بود... واقعا دستت درد نکنه :)
    انقدر کمکم کردی که دیگه خجالت می‌کشم دوباره ازت سوال کنم!!! فقط یه سوال دیگه! D:

    من اطلاعات نویسنده‌ی همون مطلب رو برای استفاده در متغیر message داخل همین تابعی که نوشتی در متغیرهایی به صورت زیر قرار دادم، اما فکر کنم اشکال داشته باشند، چون به غیر از get_the_author_posts بقیه رو تشخیص نمی‌ده...
    درواقع نمی‌تونه نویسنده‌شو شناسایی کنه...

    if (function_exists('get_avatar')) {
    	$avatar = get_avatar( get_the_author_email(), '70' );
    	}
    $name_a = get_the_author();
    $number_post_a = get_the_author_posts();
    $description_a = get_the_author_description();
    $link_a = get_the_author_meta('url');
  • Parsa

    آفلاین
    عضو فعال
    تعداد نوشته‌ها: ۱۹۲۱
    تشکر شده: ۲۶۸۳ بار
    # نوشته شده: ۸ سال پیش
    ۳ بهمن ۱۳۹۰ - ۲۲:۴۷

    در کد قبلی هم که قرار داده بودید. تابع get_the_content عملکردی نداشت

    اگر بتوانید شناسه نویسنده را بدست بیارید میتوانید با تابع get_userdata مشخصات نویسنده را لود کنید

    کاربران زیر به‌خاطر این نوشته تشکر کرده‌اند:
    امین باقیات - Arash-GH - Morteza
  • Arash-GH

    آفلاین
    عضو
    تعداد نوشته‌ها: ۳۲
    تشکر شده: ۲۰ بار
    # نوشته شده: ۸ سال پیش
    ۴ بهمن ۱۳۹۰ - ۰۸:۵۳

    عالی بود... مشکل حل شد. :)
    از تابع str_replace هم برای تغییر Styleها استفاده کردم.
    مـمـنـونـم...

    کاربران زیر به‌خاطر این نوشته تشکر کرده‌اند:
    NESTED
  • محمدرضا

    آفلاین
    عضو
    تعداد نوشته‌ها: ۱۳۸
    تشکر شده: ۴۶ بار
    # نوشته شده: ۸ سال پیش
    ۲ اسفند ۱۳۹۰ - ۱۴:۵۹

    با سلام دوستان ,اگر من بخوام بعد از ارسال هرمطلب در سایتم اون مطلب به عنوان لینک نه کلا مطلبم فقط وفقط لینک به ایمیل کاربرای سایتم ارسال بشه باید چه کدی رو بذارم داخل فایل functions.php ؟؟؟
    ممنون میشم بگید؟

  • Arash-GH

    آفلاین
    عضو
    تعداد نوشته‌ها: ۳۲
    تشکر شده: ۲۰ بار
    # نوشته شده: ۸ سال پیش
    ۲ اسفند ۱۳۹۰ - ۲۱:۲۶

    سلام...
    بفرمایید دوست عزیز :)

    add_action('publish_post', 'email_members');
    function email_members($post_ID)  {
    	global $wpdb;
    
    	$usersarray = $wpdb->get_results("SELECT user_email FROM $wpdb->users;");
    	$users = implode(",", $usersarray);
    	$headers = 'From: ... <...@xxx.com>' . "\r\n";
    	$subject = get_the_title();
    
    	$message = '<a href="'.get_permalink().'">'.get_permalink().'</a>';
    
    	add_filter('wp_mail_content_type',create_function('', 'return "text/html"; '));
    	wp_mail($users, $subject, $message, $headers);
    	return $post_ID;
    }
    کاربران زیر به‌خاطر این نوشته تشکر کرده‌اند:
    Parsa - Morteza - NESTED
  • mr.masiha

    آفلاین
    عضو
    تعداد نوشته‌ها: ۸
    # نوشته شده: ۸ سال پیش
    ۲۳ خرداد ۱۳۹۱ - ۰۰:۵۶

    parselearn گفت:

    add_action('publish_post', 'email_members');
    
    function email_members($post_ID)  {
        global $wpdb;
        $usersarray = $wpdb->get_results("SELECT user_email FROM $wpdb->users;");
        foreach($usersarray as $user){
    		$email .= $user->user_email . ",";
        }
    
    	$content_post = get_post($post_ID);
    	$content = $content_post->post_content;
    	$content = apply_filters('the_content', $content);
    	$content = str_replace(']]>', ']]>', $content);
    
    	$subject = get_the_title();
    	$message = '<div>'.get_the_title().'</div><br /><div>'.$content.'</div>';
    	$headers = 'From: خبرنامه <newsletter@labkhandezendegi.com>' . "\r\n";
    	add_filter('wp_mail_content_type',create_function('', 'return "text/html"; '));
        wp_mail($email, $subject, $message, $headers);
    
        return $post_ID;
    }

    سلام
    ممنون از این کد ولی وقتی من از این کد شما استفاده کردم و پست را ارسال کردم در ایمیلی که ارسال شده است آدرس ایمیل همه کاربران برای دیگر کاربران نمایش داده شده است. چه کار باید بکنم تا این اتفاق نیفتد؟

  • Arash-GH

    آفلاین
    عضو
    تعداد نوشته‌ها: ۳۲
    تشکر شده: ۲۰ بار
    # نوشته شده: ۸ سال پیش
    ۲۳ خرداد ۱۳۹۱ - ۰۱:۳۶

    سلام دوست عزیز...
    کافیه متغیر email رو برداریم و ایمیل‌های کاربران رو به صورت BCC داخل متغیر headers قرار بدیم. :)

    add_action('publish_post', 'email_members');
    
    function email_members($post_ID)  {
    	global $wpdb;
    
    	$content_post = get_post($post_ID);
    	$content = $content_post->post_content;
    	$content = apply_filters('the_content', $content);
    	$content = str_replace(']]>', ']]>', $content);
    
    	$subject = get_the_title();
    	$message = '<div>'.get_the_title().'</div><br /><div>'.$content.'</div>';
    	$headers = 'From: خبرنامه <newsletter@example.com>' . "\r\n";
    
    		$usersarray = $wpdb->get_results("SELECT user_email FROM $wpdb->users;");
    		foreach($usersarray as $user){
    			$headers .= 'BCC: '.$user->user_email.'\r\n';
    		}
    
    	add_filter('wp_mail_content_type',create_function('', 'return "text/html"; '));
    	wp_mail('', $subject, $message, $headers);
    
    	return $post_ID;
    }
    کاربران زیر به‌خاطر این نوشته تشکر کرده‌اند:
    mr.masiha
  • mr.masiha

    آفلاین
    عضو
    تعداد نوشته‌ها: ۸
    # نوشته شده: ۸ سال پیش
    ۲۳ خرداد ۱۳۹۱ - ۱۴:۱۷

    ممنون از راهنماییتون اما این جور که من متوجه شدم باید به صورت دستی ایمیل کاربران را مقابل کلمه BCC در کد شما اضافه کنم و این کار یعنی اینکه در صورت تغییر ایمیل کاربران یا ثبت نام های زیاد، انجام دادن کاری تقریبا نشدنی.
    آیا راه دیگه ای هم هست؟

  • Arash-GH

    آفلاین
    عضو
    تعداد نوشته‌ها: ۳۲
    تشکر شده: ۲۰ بار
    # نوشته شده: ۸ سال پیش
    ۲۳ خرداد ۱۳۹۱ - ۱۷:۵۹

    نه دیگه دوست عزیز... اصلا احتیاجی به این کار نیست!
    دقیقا برای همین از این حلقه استفاده کردیم:

    foreach($usersarray as $user){
    			$headers .= 'BCC: '.$user->user_email.'\r\n';
    		}

    کاری که این حلقه انجام می‌ده اینه که به ترتیب ایمیل‌های همه‌ی کاربران رو به صورت BCC به متغیر headers اضافه می‌کنه.

    اگر دقت کرده باشید در تابع wp_mail قسمت ایمیل‌ها را خالی گذاشتم:

    wp_mail('', $subject, $message, $headers);

    در واقع این قسمت خالی همان قسمت To است که شما بهش احتیاجی نداری... چون همه‌ی ایمیل‌های کاربران در متغیر headers ذخیره شده‌اند. :)

    کاربران زیر به‌خاطر این نوشته تشکر کرده‌اند:
    mr.masiha
  • mr.masiha

    آفلاین
    عضو
    تعداد نوشته‌ها: ۸
    # نوشته شده: ۸ سال پیش
    ۲۴ خرداد ۱۳۹۱ - ۰۰:۱۷

    متاسفانه این حلقه به دلایلی درست عمل نمی کند، چون:
    وقتی به صورتی که شما کد را نوشته اید آن را در function می گذارم هیچ ایمیلی ارسال نمی شود ولی وقتی مقابل عبارت BCC: ایمیل چند کاربر را می گذارم ایمیل خبرنامه برایشان ارسال می شود.

  • Arash-GH

    آفلاین
    عضو
    تعداد نوشته‌ها: ۳۲
    تشکر شده: ۲۰ بار
    # نوشته شده: ۸ سال پیش
    ۲۴ خرداد ۱۳۹۱ - ۰۱:۱۲

    درسته... نکته‌ی کوچیکی را فراموش کرده بودم!
    از این حلقه استفاده کنید.

    foreach($usersarray as $user){
    	$headers .= 'BCC: '.$user->user_email;
    	$headers .= "\r\n";
    }
    کاربران زیر به‌خاطر این نوشته تشکر کرده‌اند:
    mr.masiha

درباره‌ی این موضوع



برچسب‌ها

هیچ برچسبی نیست.