简短的问题:编辑sanitize函数允许我在固定链接中添加大写字母和符号。但是,当我使用符号(如:“。”,“=”,“?”)时,链接最终会出现404错误。我猜是因为数据库无法使用这样的URL访问页面。
有什么方法可以解决这个问题吗?
长期问题:我正在将某个用ASP编写的网站服务器转换为wordpress网站。我复制了每个页面的内容并创建了一个wordpress网站,它复制了当前ASP的网站结构。但我需要保持网址相同,并且他当前的网站页面看起来像“http://thesite.com/ContentPage.aspx?page=subpage”。
答案 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(); ?>
不要忘记将模板与父页面(动物)相关联。