在未修改.htaccess的情况下使用WordPress多站点自定义注册页面

时间:2016-02-29 作者:Mayeenul Islam

是的,坚持为创建自定义注册页WordPress Multisite.

这是一个经过精心修改的问题,我们中的许多人都在寻找答案。也许有人得到了一个,但我仍然找不到任何可靠的,全面的问题。我想找一个.htaccess 方式-PHP或WordPress方式。

第1步:

我研究了这项任务中最明显的一篇文章:

  • Using a Custom wp-signup Page With WordPress MU - <好的,现在我已经复制了/wp-signup.php 到我的主题中名为signup.php, 将其设置为页面模板,并使用URL调用该页面http://example.com/signup.

    我更改了所需的位置。喜欢而不是get_header( \'wp-signup\' ); 我使用了我的主题中的自定义get_header(\'null\');. 那个(header-null.php) 从默认的设计和架构来看,这是非常简单的header.php 我的主题文件。

    唉!没有header-wp-signup.php 在WordPress的任何地方

    同样,我替换了get_footer( \'wp-signup\' ); 使用:

        ?> <!-- /ending of php tag -->
        </div> <!-- /.container .site-area .not-logged-in-page -->
    
    <?php wp_footer(); ?>
    
    </body>
    </html>
    
    步骤2:toscho帮助我解决了两个问题,即调用已加载的文件。因此,我没有显示绝对路径,而是简单地注释了这些行:

    //require( dirname(__FILE__) . \'/wp-load.php\' );
    
    以及

    //require( dirname( __FILE__ ) . \'/wp-blog-header.php\' );
    
    现在,我有了一个很好的工作文件,用于新修改的注册页面。我需要驱车离开/wp-signup.php 到这里,不用.htaccess.

    第三步:

    我找到了这个WordPress。组织支持线程非常有用:

    • individual MU Registration Page possible? - <大卫·萨德尔现在我做了一个;mu插件;在以下位置创建文件:wp-content/mu-plugins/sign-up-location.php. 在那里,我使用了两个函数:

      /**
       * Changing the Registration page URL.
       * 
       * @return string The URL of the new page.
       * --------------------------------------------------------------------------
       */
      function project_signup_page() {
          $page =  network_site_url() .\'signup/\';
          return $page;
      }
      add_filter( \'wp_signup_location\', \'project_signup_page\' );
      
      
      /**
       * Redirect from default signup page to custom page.
       * 
       * @return void
       * --------------------------------------------------------------------------
       */
      function project_redirect_from_default_signup() {
          if( strpos($_SERVER[\'REQUEST_URI\'], \'wp-signup.php\')) {
              wp_redirect(network_site_url() .\'signup/\');
              exit();
          }
      }
      add_action( \'plugins_loaded\', \'project_redirect_from_default_signup\' );
      
      第一个是将注册URL更改为我的自定义路径。第二个是我想要的,从/wp-signup.php/signup 没有.htaccess.

      Note: 现在使用常规插件可以获得相同的效果,而不是创建MU插件。

      步骤4(提供步骤):

      根据@toscho的建议,我用Rewrite Endpoint:

      <?php
      /**
       * Rewrite endpoint : /register.
       *
       * @return void
       * --------------------------------------------------------------------------
       */
      function project_registration_endpoint() {
          add_rewrite_endpoint( \'register\', EP_ROOT );
          if( get_option("EDIT_REWRITE_RULE") != 1 ) {
              flush_rewrite_rules();
              update_option( "EDIT_REWRITE_RULE", 1 );
          }
      }
      add_action( \'init\', \'project_registration_endpoint\' );
      
      /**
       * Custom Template for Registration.
       *
       * @param  string $template Template to be loaded.
       * @return string           Our custom template to show up.
       * --------------------------------------------------------------------------
       */
      function project_custom_templates( $template ) {
          if( ! is_admin() ) {
              if( get_query_var(\'register\') || strpos($_SERVER[\'REQUEST_URI\'], \'wp-signup.php\') ) {
                  $template = get_template_directory() .\'/signup.php\';
              }
          }
          return $template;
      }
      add_filter( \'template_include\', \'project_custom_templates\' );
      
      /**
       * Return a value for \'/register\'
       * Make sure that \'get_query_var( \'register\' )\' will not return just an empty string if it is set.
       *
       * @link   http://wordpress.stackexchange.com/a/51450/22728
       * @link   https://www.pmg.com/blog/a-mostly-complete-guide-to-the-wordpress-rewrite-api/
       *
       * @param  array $vars  Query variables.
       * @return array        Modified query variables.
       * --------------------------------------------------------------------------
       */
      function project_set_epex_var( $vars ) {
          isset( $vars[\'register\'] ) and $vars[\'register\'] = true;
          return $vars;
      }
      add_filter( \'request\', \'project_set_epex_var\' );
      
      Modified: 在那一点上,我换了鼻涕虫/signup/register 解决任何可能发生的冲突。我相应地更改了mu插件的字符串。并使页面模板失效。

      Everything is working fine, 我得到了我想要的东西:)。。。除了

      成功或错误消息
      all the success or error messages are gonewp_redirect(). :o

      我检查了我的文件,是的show_user_form() 是否有$errors 参数,除错误或成功消息外,一切正常。

      如何在自定义页面注册页面中显示成功和/或错误消息?

      我用孟加拉语详细地解释了整个事情,并用孟加拉语的所有来源blog post - 恐怕,孟加拉语的自动翻译还没有那么好。

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

在您的signup.php 文件,尝试更改表单action 从…起wp-signup.phpsignup.php... 这样,表单数据不会通过重定向传递,而是直接返回到同一个文件,这应该保留$errors 从表单过帐。