使用此方案设计插件的最佳实践

时间:2017-04-05 作者:Xaqron

我有一个HTML 我想在WordPress 网站但此页面应仅对登录的用户可用,未登录的用户应重定向到登录页面。因为我需要检查用户状态aPHP 页面应执行此操作,如果用户登录,则返回HTML 所容纳之物

is_user_logged_in 函数可以完成这项工作,但我对如何实现它感到困惑,因为就我所读的插件开发而言,我的案例两者都不适合Actions 也没有Filters. 我也需要放置我自己的PHP 页面,也可以通过内置WordPress 页如果两者都有,建议使用哪一种?

请注意,所有用户的页面地址始终相同。

1 个回复
最合适的回答,由SO网友:Johansson 整理而成

您可以在插件激活后创建页面。看看这个:

register_activation_hook( __FILE__, \'insert_page\' );

function insert_page(){
    $my_page = array(
      \'post_title\'    => \'My Page\',
      \'post_name\'     => \'MyPage\',
      \'post_content\'  => \'My page\'s content.\',
      \'post_status\'   => \'publish\',
      \'post_author\'   => get_current_user_id(),
      \'post_type\'     => \'page\',
    );
    wp_insert_post( $my_page, \'\' );
}
然后将模板文件分配到自定义页面:

add_filter( \'page_template\', \'my_custom_page\' );
function my_custom_page( $page_template )
{
    if ( is_page( \'MyPage\' ) ) {
        $page_template = plugin_dir_path( __FILE__ ) . \'/MyPage.php\';
    }
    return $page_template;
}
现在,您有了页面和模板。在模板中,使用此代码检测访问者的状态,并决定是否重定向访问者:

<?php 
    if (!is_user_logged_in()) { 
        wp_safe_redirect( site_url(\'/wp-login.php\')); 
        exit;
    } 
?>
在此代码之后,您可以安全地输出内容,因为如果用户未登录,则在输出内容之前将重定向用户。

如果你需要进一步的帮助,请告诉我。