我正在构建一个插件,帮助用户注册并从WordPress前端登录,并根据用户是否登录隐藏和显示资源。
我坚持的一个方面是如何根据用户的登录/注销状态更改根域中显示的主页。在主题模板中,使用此结构很容易实现:
if ( is_user_logged_in() ) {
// Logged-in user content
} else {
// Logged-out user content
}
因为这是一个插件,我不希望网站管理员不得不乱用他们的主题文件。到目前为止,我已尝试将此添加为动态重写首页:
if ( is_user_logged_in() ) {
$about = get_page_by_title( 'Front Page Logged In' );
update_option( 'page_on_front', $about->ID );
update_option( 'show_on_front', 'page' );
} else {
$about = get_page_by_title( 'Front Page Logged Out' );
update_option( 'page_on_front', $about->ID );
update_option( 'show_on_front', 'page' );
}
update_option
函数可以自行运行,但是包含在if语句中,会抛出一个致命的错误,因此网站根本不会加载。
我还尝试使用add_rewrite_rule
API简单地告诉WordPress将根域视为另一个页面。这在指定特定页面时有效,但我无法弄清楚如何使其适用于根(并且只有根)URL,即使我可以,它也包含在if语句中时也无法正常工作。
function add_my_rule() {
if ( is_user_logged_in ) {
add_rewrite_rule('test','index.php?pagename=loggedin','top');
} else {
add_rewrite_rule('test','index.php?pagename=loggedout','top');
}
}
add_action('init', 'add_my_rule');
所以回顾一下,如果用户登录,我需要一种方法来显示一个页面作为首页;如果他们从一个插件(而不是从主题文件)注销,则需要一个不同的页面。任何有关如何使这项工作的见解将非常感谢!
答案 0 :(得分:1)
这应该是基于模板文件的技巧。在插件激活时,您仍然需要让用户添加/构建模板或将其复制到主题目录。
add_filter( 'template_include', 'member_home' );
function member_home( $template ) {
if ( is_home() || is_front_page() ){
if ( is_user_logged_in() ) {
return locate_template('home-member.php');
} else {
return get_home_template();
}
}
return $template;
}
这是另一种方法,仅使用插件。这假设您的插件文件夹中有一个templates/
目录,其中包含文件member-home.php
。
它做了两件事:
the_content
(在此示例中拉出“Hello World”帖子)您还可以通过register_activation_hook()
添加新页面,并在set_home_content()
函数中查询该数据。
define('MYPLUGIN_PLUGIN_PATH', plugin_dir_path( __FILE__ ));
define('ACTIVE_THEME_PATH', get_stylesheet_directory());
add_action('plugins_loaded', 'myplugin_plugins_loaded');
function set_home_template( $template ){
if ( is_home() || is_front_page() ){
if ( is_user_logged_in() ){
if( file_exists(ACTIVE_THEME_PATH.'templates/member-home.php') ) {
return ACTIVE_THEME_PATH.'templates/member-home.php';
} else {
return MYPLUGIN_PLUGIN_PATH.'templates/member-home.php';
}
} else {
return get_home_template();
}
}
// Returns the template
return $template;
}
function set_home_content( $content ){
if ( is_home() || is_front_page() ){
if ( is_user_logged_in() ){
$args = array(
'pagename' => 'hello-world',
'posts_per_page' => 1
);
$posts = new WP_Query( $args );
while ( $posts->have_posts() ) {
$posts->the_post();
$content = get_the_content();
}
wp_reset_postdata();
// Returns the custom queried content
return $content;
}
}
// Returns the default content.
return $content;
}
function myplugin_plugins_loaded() {
add_filter( 'template_include', 'set_home_template' );
add_filter( 'the_content', 'set_home_content', 10 );
}
这应该会给你一些想法,但正如你所说,可能没有真正的“自动”解决方案。用户仍然必须调整主题文件/添加页面或任何其他内容。但这可能是一个伟大的插件文档的一部分;)