我一直在做一个项目,我想根据用户元数据显示一个短代码。我在创建新用户时添加了一个用户元。用户元的默认值设置为false。现在,我的逻辑是检查用户元在登录时是否为“false”。如果值为“false”,我将显示短代码,然后再次将用户元更新为“true”。但是,这是行不通的。新创建的用户登录时,无法看到任何短代码。能发现我的错误吗?
This code adds user meta for all the newly created users
add_filter( \'insert_user_meta\', \'new_user_meta\', 20, 3);
function new_user_meta( $meta, $user, $update )
{
if ( $update )
return $meta;
$meta[\'GDPR_TERMS_READ\'] = false;
return $meta;
}
This piece of code checks whether the user meta is false or not to Display the shortcode
add_action( \'init\', \'gdpr_flag\' );
function gdpr_flag() {
$current_user = get_current_user_id();
if ( ! $current_user ) {
// user not logged in
return;
}
if ( get_user_meta( $current_user, \'GDPR_TERMS_READ\', true ) ) {
// user meta set already
return;
}
// render some html
echo do_shortcode( \'[wpterms id="2230"]\' );
// update user meta
updateHasReadFlag( $current_user );
}
function updateHasReadFlag($user) {
// I added support for using this function either with user ID or user object
if ( $user && is_int( $user ) ) {
$user_id = $user;
} else if ( ! empty( $user->ID ) ) {
$user_id = $user->ID;
} else {
return;
}
return update_user_meta( $user_id, \'GDPR_TERMS_READ\', true );
}
This is the code generated for pop up from the plugin
<div id="tlight" class="tbrightcontent">
<div class="termspopupcontainer">
<h3 class="termstitle">GDPR</h3>
<div class="termscontentwrapper">
<p>This is a GDPR pop up.</p>
<p> </p>
<p> </p>
<form><input name="accept" type="checkbox" value="Gdpr">I accept the GDPR</form>
</div>
<form method="post">
<div class="tthebutton">
<input class="termsagree" name="wptp_agree" type="submit" value="Accept">
<input class="termsdecline" type="button" onclick="window.location.replace(\'https://google.com\')" value="I Do Not Agree">
</div>
</form>
</div>
</div>
最合适的回答,由SO网友:Antti Koskinen 整理而成
我假设您使用的短代码呈现了一些html。如果是这种情况,那么您可以考虑将您的函数挂接到以后的某个操作,可能是主题中的某个操作,以便将短代码内容与所有其他html一起呈现。你甚至可以考虑使用wp_footer
, 如果这样晚钩是可以的。
你可以这样写你的函数,
add_action( \'some_theme_hook\', \'gdpr_flag\' );
function gdpr_flag() {
$current_user = get_current_user_id();
if ( ! $current_user ) {
// user not logged in
return;
}
if ( get_user_meta( $current_user, \'HAS_READ\', true ) ) {
// user meta set already
return;
}
// render some html
echo do_shortcode( "[wpterms id=2230]" );
// update user meta
updateHasReadFlag( $current_user );
}
function updateHasReadFlag($user) {
// I added support for using this function either with user ID or user object
if ( $user && is_int( $user ) ) {
$user_id = $user
} else if ( ! empty( $user->ID ) ) {
$user_id = $user->ID;
} else {
return;
}
return update_user_meta( $user_id, \'HAS_READ\', true );
}
P.S.“HAS\\u READ”并不能说明元数据的用途,因此您可能需要考虑重命名元键。尤其是如果其他开发人员碰巧查看了您的代码或稍后使用了用户元。也许使用诸如“gdpr\\u term\\u read”之类的内容可以更加明确