Ok, so per RamRaider, habe ich die gesamte Funktion enthalten. Ich mache mir immer Sorgen, dass ich am Ende eine Variable nicht zuordnen oder einen Tippfehler enthalten werde, wenn ich es generischer mache, also hoffentlich keinen dieser Fehler.PHP Funktion nur letzten Wert des Arrays
function my_custom_popular_posts_html_list($mostpopular, $instance){
$output = 'https://startofwebaddress';
$weekday = date("N")-1;
$excerpt = '';
$popularPost = get_post($mostpopular[$weekday]->id);
$popularPostUrl = get_permalink($popularPost->ID);
$featuredImgUrl = get_the_post_thumbnail_url($popularPost->ID, 'full');
$popularPostTitle = esc_html(get_the_title($popularPost));
$popularProduct = wc_get_product($popularPost);
$popularProductLowPrice = $popularProduct->get_price();
$excerpt = get_keywords_by_id($mostpopular[$weekday]->id); //most popular = 0, 2nd most = 1, 3rd most = 2, etc.
$initial = array("oldterms");
$replace = array("newterms");
$excerpt = preg_replace($initial,$replace,$excerpt);
$commonName = str_replace("+"," ",$excerpt);
$output .= $excerpt;
$output .= 'endofwebaddress';
//Get Key for second input
$First_url = $output;
$xml = new DOMDocument();
$ch = curl_init ($First_url);
curl_setopt($ch, CURLOPT_VERBOSE, 1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);//return xml
curl_setopt($ch, CURLOPT_HEADER, FALSE);//ignore
$xml->loadXML(curl_exec($ch));
curl_close ($ch);
$TagName1 = $xml->getElementsByTagName('TagName1')->item(0)->nodeValue;
//Email URL
$EmailURL = "urlthatneeds&TagName1=";
$EmailURL .= $TagName1;
$EmailURL .= "restofurl";
$text=file_get_contents($EmailURL);
$res = preg_match_all(
"/[a-z0-9]+[_a-z0-9.-]*[a-z0-9][email protected][a-z0-9-]+(.[a-z0-9-]+)*(.[a-z]{2,4})/i",
$text,
$matches
);
session_start();
foreach(array_unique($matches[0]) as $email) {
$url = 'https://api.sendgrid.com/';
$user = 'user';
$pass = 'password';
$json_string = array(
'to' => $email,
'category' => 'most_popular',
'asm_group_id' => '1141',
);
}
$params = array(
'api_user' => $user,
'api_key' => $pass,
'x-smtpapi' => json_encode($json_string),
'to' => '[email protected]', //This should be ignored
'subject' => $commonName . ' Detailed Protocols and Products.',
'html' => 'A whole ton of HTML',
'text' => 'Text Version of HTML',
'from' => '[email protected]',
);
$request = $url.'api/mail.send.json';
// Generate curl request
$session = curl_init($request);
// Tell curl to use HTTP POST
curl_setopt ($session, CURLOPT_POST, true);
// Tell curl that this is the body of the POST
curl_setopt ($session, CURLOPT_POSTFIELDS, $params);
// Tell curl not to return headers, but do return the response
curl_setopt($session, CURLOPT_HEADER, false);
// Tell PHP not to use SSLv3 (instead opting for TLS)
curl_setopt($session, CURLOPT_SSLVERSION, CURL_SSLVERSION_TLSv1_2);
curl_setopt($session, CURLOPT_RETURNTRANSFER, true);
// obtain response
$response = curl_exec($session);
curl_close($session);
// print everything out
print_r($response);
}
add_filter('wpp_custom_html', 'my_custom_popular_posts_html_list', 10, 2);
function get_keywords_by_id($post_id){
// Get post data
$the_post = get_post($post_id);
// Get post_content
$the_post_id = $the_post -> post_title;
return $the_post_id;
}
Hoffentlich kann ich das Problem vereinfachen. $ EmailUrl enthält eine Zeichenfolge mit allen E-Mail-Adressen. Ich parse es mit der Regex im Code, um alle E-Mail-Adressen heraus zu bekommen, und diese werden in einem Array ausgegeben.
Pro RichGoldMD (danke für die Vorschläge), habe ich session_start() außerhalb der Schleife verschoben und zusätzliche Variablen eliminiert, um E-Mails direkt zu übergeben. Wenn Sie dies tun, sendet die Funktion nur eine E-Mail an [email protected] Wenn ich das erste "to" -Attribut anwende und es von der Variablen in eine durch Kommas getrennte Liste ändere, erhalte ich E-Mails, die an die kommagetrennte Liste gesendet werden. Wenn ich jedoch versuche, die Array-Variable einzugeben, oder wenn ich versuche, die Array-Variable in eine kommagetrennte Liste zu bringen (was irgendwie vorher so war), bekomme ich nur eine E-Mail an [email protected] Wenn ich das erste Attribut 'to' in [$ email, '[email protected]'] ändere, erhalte ich eine E-Mail an [email protected] und sende eine E-Mail an die letzte E-Mail im Array, aber keine E-Mail sendet zu den anderen ~ 1500 E-Mail-Adressen.
Hoffentlich macht dies ein wenig mehr Sinn und tut leid für den Mangel an Kontext. Lassen Sie mich wissen, ob mehr Informationen das nützlich machen würden. Ich bin auch glücklich, dies etwas generischer zu machen, wenn es für andere Menschen nützlicher wäre.
Danke!
eine Sache zu beachten - using'echo' vor 'session_start' ist ein no-no und mit der Verwendung von' session_start() 'in einer Schleife kombiniert ....... ... nicht gut. Das Problem könnte deutlicher zu sehen sein, aber wenn Sie den Code in seiner Gesamtheit eher als Bits n Stücke – RamRaider
Ich entfernte das Echo, so dass dieses Problem lösen sollte. Ich habe auch den vollständigen Code gepostet. Irgendwelche Vorschläge? – TomM0419