从functions.php中搜索页面元数据中的元值

时间:2015-02-26 19:56:33

标签: php arrays wordpress metadata

我在基于WP的网站上创建了一个简单的简报页面。每当有人注册时事通讯时,他选择的电子邮件地址和类别都会存储在该页面的元数据中。

来自newsletter.php的代码示例(这是一个模板):

add_post_meta(get_the_ID(), 'subscribed', array('email' => $_POST['email'], 'cats' => $_POST['chosenCats'], 'time' => get_the_time('d-m-Y | H:i')));

以下是以这种方式存储的两个订阅的示例:

array(2) {
  [0]=>
  array(3) {
    ["email"]=>
    string(14) "agsdgeg@sdghrh"
    ["cats"]=>
    string(21) "inwestycje;targi_wyd;"
    ["time"]=>
    string(18) "23-02-2015 | 12:18"
  }
  [1]=>
  array(3) {
    ["email"]=>
    string(10) "asfas@egeg"
    ["cats"]=>
    string(31) "produkty;katalog_firm;medycyna;"
    ["time"]=>
    string(18) "23-02-2015 | 12:18"
  }
}

我想做什么?

  1. 假设有人订阅了一个名为“小狗”的类别。
  2. 有一天,我在“小狗”类别中添加了一个新帖子。
  3. 我的脚本在functions.php中启动,并在Newsletter的页面元数据中查找该类别的所有订阅。
  4. 它正确地找到所需的订阅并从每个订阅中获取电子邮件地址。
  5. 它会向这些人发送通知电子邮件。
  6. 有什么难的呢?

    对我来说最困难的部分是弄清楚如何在functions.php中浏览页面的元数据。你能帮帮我吗?

1 个答案:

答案 0 :(得分:0)

使用preg_replace_callback很容易,使用正则表达式过滤元标记。

 <?php

 $html = '<meta encoding="utf-8">';
 $metadataArray = array();

 $metadata = preg_replace_callback('/\<meta\s(.*)\>/i', function($matches)
 {
    $exp = explode($matches[1]);
    $metadataArray[$exp[0]] = str_replace('"', '', $exp[1]);
 }, $html);

现在,您确实比这个示例更好,但它是从元标记中过滤掉数据的快捷方式,假设这是您正在寻找的目标。