template_redirect
通常是挂接自定义回调的好操作,当您想有条件地为当前请求/视图添加或删除模板操作/部分,因为使用已确定,WP对象已设置,WP正在准备确定要加载的模板。
您可以使用此操作检查请求是否针对主页(首页)以及当前用户是否是第一次。这些信息可以保存为单独的用户元数据。比如像这样,
// use a custom callback to check and set home page first visit flag to user
add_action(\'template_redirect\', \'prefix_check_first_home_page_visit\', 1); // mind the priority
function prefix_check_first_home_page_visit() {
// Is home page
if ( ! is_front_page() ) {
return;
}
// Get user
$user = wp_get_current_user();
// Only logged in users
if ( ! $user->exists() ) {
return;
}
// Get user meta for home page visit
$visited_home_meta_key = \'home_page_first_visit\'; // change as needed
$has_visited_home = get_user_meta(
$user->ID,
$visited_home_meta_key,
true
);
// Check, if user has already visited home page
if ( $has_visited_home ) {
return;
}
// Save first visit to user meta
update_user_meta(
$user->ID,
$visited_home_meta_key,
time() // e.g. timestamp when the first visit happened, change as needed
);
// Trigger later action
add_filter( \'is_home_page_first_visit\', \'__return_true\' );
}
我想到了上面,在第一次回调结束时使用了一个自定义过滤器来触发下面的回调,它负责将模式html添加到模板中。通过这种方式,代码被分成更小的部分,这使得以后更容易管理和更改。
// A separate function for enabling the modal
add_action(\'template_redirect\', \'prefix_show_home_page_first_visit_modal\', 10); // mind the priority
function prefix_show_home_page_first_visit_modal() {
// Trigger modal printing conditionally
if ( apply_filters( \'is_home_page_first_visit\', false ) ) {
// Print the modal html to the site footer for example
add_action(\'wp_footer\', \'prefix_render_home_page_first_visit_modal\');
}
}
function prefix_render_home_page_first_visit_modal() {
// Get template part or echo html here
}