我正在为work(still)编写一个插件,还有一个问题。
我已经根据需要添加了我的元框。然而,我遇到的问题发生在保存帖子时。我的节俭片段来自this post. 我也得到了类似的答案here, 但它只是因为某种原因不起作用/
protected function __update_post_meta( $post_id, $field_name, $value = \'\' )
{
if ( empty( $value ) OR ! $value )
{
delete_post_meta( $post_id, $field_name );
}
elseif ( ! get_post_meta( $post_id, $field_name ) )
{
add_post_meta( $post_id, $field_name, $value );
}
else
{
update_post_meta( $post_id, $field_name, $value );
}
}
使用以下函数调用上述函数。然而,我现在想起来,我不确定我的问题在于实际储蓄。我想可能是
nonce
这可能会把它扔掉。
public function _wp_save_post( $post_id, $post )
{
if ( empty($_POST)
OR !isset($_POST[\'argus_edit_visitor\'])
OR !wp_verify_nonce( $_POST[\'argus_edit_visitor\'], \'argus_edit_visitor\' ) )
{
return $post->ID;
}
if ( ! current_user_can( \'edit_post\', $post->ID ) ) return $post->ID;
// v_f_name | v_l_name | v_workstation | v_id
// Argh!
$this->__update_post_meta( $post->ID, \'v_f_name\', $_POST[\'v_f_name\'] );
$this->__update_post_meta( $post->ID, \'v_l_name\', $_POST[\'v_l_name\'] );
$this->__update_post_meta( $post->ID, \'v_workstation\', $_POST[\'v_workstation\'] );
$this->__update_post_meta( $post->ID, \'v_id\', $_POST[\'v_id\'] );
}
nonce的用法如下所示:
<input type="hidden" name="argus_edit_visitor" id="argus_edit_visitor" value="{$nonce}" />
并使用
$nonce = wp_create_nonce( plugin_basename( __FILE__ ) );
. 输入字段位于存储在变量$html中的html块内部。Stackexchange正在解析我的html,否则我会将其粘贴到这里。
-扎克
EDIT: 刚刚测试了一下is 临时官员的过错
EDIT2: 我的拼写错误,但仍然不起作用。
最合适的回答,由SO网友:EAMann 整理而成
我真的很喜欢你干净的类结构:-),但我有一个建议可以解决问题(基于我上周末构建的插件中的nonce和meta-box的经验):
Don\'t try to create the nonce field manually. 您当前拥有:
$nonce = wp_create_nonce( plugin_basename( __FILE__ ) );
...
<input type="hidden" name="argus_edit_visitor" id="argus_edit_visitor" value="{$nonce}" />
创建此字段的标准方法是使用WordPress\'
wp_nonce_field()
作用它将为您添加隐藏字段:
wp_nonce_field( __FILE__, \'argus_edit_visitor\' );
Verifying the nonce
您正在根据错误的字符串进行验证。在代码中,您使用
__FILE__
但你用字符串验证
argus_edit_vistor
. 您有:
if ( empty($_POST)
OR !isset($_POST[\'argus_edit_visitor\'])
OR !wp_verify_nonce( $_POST[\'argus_edit_visitor\'], \'argus_edit_visitor\' ) )
{
echo "Erm. Why?";
return $post->ID;
}
您应该具备:
if ( empty($_POST)
OR !isset($_POST[\'argus_edit_visitor\'])
OR !wp_verify_nonce( $_POST[\'argus_edit_visitor\'], __FILE__ ) )
{
echo "Erm. Why?";
return $post->ID;
}
我通常使用
plugin_basename(__FILE__)
创建nonce时。但是,只要nonce创建和nonce验证发生在同一个文件中,您就不应该以自己的方式遇到问题。