在Wordpress永久链接/ URL中使用符号

时间:2015-08-11 23:30:31

标签: asp.net windows wordpress url permalinks

简短的问题:编辑sanitize函数允许我在固定链接中添加大写字母和符号。但是,当我使用符号(如:“。”,“=”,“?”)时,链接最终会出现404错误。我猜是因为数据库无法使用这样的URL访问页面。

有什么方法可以解决这个问题吗?

长期问题:我正在将某个用ASP编写的网站服务器转换为wordpress网站。我复制了每个页面的内容并创建了一个wordpress网站,它复制了当前ASP的网站结构。但我需要保持网址相同,并且他当前的网站页面看起来像“http://thesite.com/ContentPage.aspx?page=subpage”。

1 个答案:

答案 0 :(得分:0)

您可以创建页面层次结构,应用重写规则并创建页面模板,以解决问题,而无需向永久链接添加额外内容,最终URL最终看起来像旧的ASP URL。

查询变量'页面'保存单个分页Post或Page的pagenumber,不建议使用此queryvar。您应该检查是否需要维护网址结构。

以此页面结构为例:

如果我访问http://thesite.com/Animals.aspx?page=Lion,我应该会看到" Lion"页

要实现此目的,您必须使用以下正则表达式将add_rewrite_rule函数添加到函数文件中:

^([\w\d\-]*)(?:\.aspx?).*$

(我不习惯正则表达式,所以我想有更简单的方式来编写它。)

导致类似这样的事情:

  add_rewrite_rule('^([\w\d\-]*)(?:\.aspx?).*$','index.php?pagename=$matches[1]','top');

在Codex中的the example之类的函数中使用它。这样,您就可以在地址栏中输入http://thesite.com/index.php?pagename=Animals时访问http://thesite.com/Animals.aspx?page=Lion

修改规则后,不要忘记刷新并重新生成重写规则数据库。

所以现在你必须得到这个页面' queryvar并执行自定义查询以获取页面子项。最好的方法是创建page template。在主题文件夹中创建一个文件aspx-template.php并添加以下内容:

<?php
/**
* Template Name: aspx Template
*/

get_header(); ?>

<div id="primary" class="content-area">
  <main id="main" class="site-main" role="main">
  <?php
    $pagename = get_post_field( 'post_name', get_the_ID() );
    if ( isset($_GET['page']) ) :  $pagename .= '/' . sanitize_text_field( $_GET['page'] ); endif;

    $args = array(
      'post_type'   => 'page',
      'pagename'    => $pagename,
      'post_status' => 'publish'
    );
    $query = new WP_Query( $args );
    if ( $query->have_posts() ) : while ( $query->have_posts() ) : $query->the_post();
    ?>
    <article>
        <header class="entry-header">
            <?php the_title( '<h1 class="entry-title">', '</h1>' ); ?>
        </header><!-- .entry-header -->
        <div class="entry-content">
            <?php the_content(); ?>
        </div><!-- .entry-content -->
    </article><!-- #post-## -->
    <?php endwhile; wp_reset_postdata(); ?>
    <?php else : ?>
    <div>
      No page found
    </div>
    <?php endif; ?>
  </main><!-- .site-main -->
</div><!-- .content-area -->

<?php get_footer(); ?>

不要忘记将模板与父页面(动物)相关联。