如何从GET_POST_META()值数组中获取单个值?

时间:2015-02-23 作者:themav

我正在尝试自定义一个插件,以根据插件收集和存储的以前IP值检查当前用户的IP。

该插件收集用户对称为“竞争对手”的自定义帖子类型的投票。该插件还收集用户每次投票的IP,以防止用户对给定竞争对手进行多次投票。

这是插件用来存储的代码:

将最近的投票者IP放入wp\\U Posteta数据库表中名为“lastIP”的$键中,所有投票给竞争对手的IP都放入wp\\U Posteta数据库表中名为“history”的下一个$键中(因此可能有几十个IP存储在“history”键数组中,每个IP都有一个时间戳,另外两个值中的一个值取决于投票类型)/ol>要存储的现有代码价值观-非常有效:

function wps_update_history ( $thiscompetitor, $field, $value, $lastIP ) {

  update_post_meta($thiscompetitor, \'lastIP\', $lastIP);

  $current_history = get_post_meta($thiscompetitor, \'history\', true);
  $current_history_array = unserialize($current_history); 

  //push new values on
  $current_history_array[] = array ( current_time( "timestamp" ), $lastIP, $field, $value           );

  update_post_meta($thiscompetitor, \'history\', serialize( $current_history_array ));
}
我尝试了这个方法来获取IP历史记录列表(检查当前用户是否在列表中),但它不起作用(在post循环中,使用wp_queryorderby=>random) - 从…起this post here

$hasIP = false;
    $histMeta = get_post_meta($post->ID, \'history\', false);
        foreach($histMeta as $array) {
            if(isset($array[\'lastIP\'])) {
                $hasIP = $array[\'lastIP\'];
                break;
            }
        }
    echo $hasIP;
我甚至尝试只回显整个历史数组(用于调试),但都无法正常工作。

    echo $histMeta;
最终,我想做的是这样的逻辑:

if (current_user has their IP in this $post=>ID wp_postmeta \'history\' key array) {
       // don\'t show or let them vote on this $post=>ID
    } else {
       // try another $post=>ID
        }
有什么建议我可以实现上述逻辑吗?

1 个回复
SO网友:cybmeta

首先,让met这样说,而不是echo, 您应该使用var_dumpprint_r 用于调试。乍一看,我看到您正在构建一个序列阵列$current_history_array 但您正在尝试将其用作关联数组。

$current_history_array[] = array ( current_time( "timestamp" ), $lastIP, $field, $value           );
上述代码生成一个序列数组,例如:

array(
    \'1424680884\',
    \'77.77.777.777\',
    $field,
    $value
);
之后,您尝试访问lastIP 密钥使用$array[\'lastIP\'] 但这样的钥匙并不存在。相反,最后一个IP存储在索引2中:$array[2]. 如果要使用关联数组,必须按如下方式构建:

$current_history_array[] = array (
                               //The structure is key => value
                               \'time\'   => current_time( "timestamp" ),
                               \'lastIP\' => $lastIP,
                               \'field\'  => $field,
                               \'value\'  => $value          
);
上述代码生成如下数组:

array(
    //The structure is key => value
    \'timestamp\' => \'1424680884\',
    \'lastIP\'    => \'77.77.777.777\',
    \'field\'     => $field,
    \'value\'     => $value
);
现在您可以访问\'lastIP\' 钥匙组件$array[\'lastIP\'].

另外,请注意,您存储的是序列化数据,因此在将其用作数组之前,必须先取消序列化:

$hasIP = false;
$histMeta = get_post_meta($post->ID, \'history\', false);
    foreach($histMeta as $array) {

        $array = unserialize( $array );

        if(isset($array[\'lastIP\'])) {
            $hasIP = $array[\'lastIP\'];
            break;
        }

    }
echo $hasIP;

结束

相关推荐

列出分类法:如果分类法没有POST,就不要列出分类法--取决于定制的POST-META?

这可能很难解释,我不知道是否有解决办法!?我有一个名为“wr\\u event”的自定义帖子类型和一个名为“event\\u type”的分层自定义分类法。自定义帖子类型有一个元框,用于event_date 并且与此帖子类型关联的所有帖子都按以下方式排序event_date. 我在循环中有一个特殊的条件来查询event_date 已经发生了-在这种情况下,它没有显示,但只列在我的档案中。就像你可以使用wp_list_categories() 我编写了一个自定义函数,它以完全相同的方式列出所有分类术语。现在