【问题标题】:Using Symbols in Wordpress Permalinks / URLs在 Wordpress 永久链接/URL 中使用符号
【发布时间】:2015-08-11 23:30:31
【问题描述】:

小问题:编辑清理功能允许我在我的永久链接中添加大写字母和符号。但是,当我使用符号(例如:“.”、“=”、“?”)时,链接最终会出现 404 错误。我猜是因为数据库无法使用这样的 URL 访问页面。

有没有办法解决这个问题?

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

【问题讨论】:

  • URL 重写可能是一个选项,blog.lextudio.com/2013/08/…
  • 这似乎是一种重定向。我希望避免重定向。或者你说的是它会加载页面“/2015/09/subpage”的wordpress版本,但最终的URL最终会看起来像旧的ASP URL“/ContentPage.aspx?page=subpage” ?

标签: asp.net windows wordpress url permalinks


【解决方案1】:

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

查询变量“page”保存单个分页帖子或页面的页码,不建议使用此查询变量。您应该检查是否需要维护 url 结构。

以这个页面结构为例:

如果我访问http://thesite.com/Animals.aspx?page=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/Animals.aspx?page=Lion时,您将访问http://thesite.com/index.php?pagename=Animals

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

所以现在您必须获取“页面”查询变量并执行自定义查询以获取页面子级。最好的方法是创建一个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(); ?>

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

【讨论】:

  • 我添加了function custom_rewrite_basic() { add_rewrite_rule('^([\w\d\-]*)(?:\.aspx)?(?:\?page=)?([\w\d\-]*)(?:.*)$', 'index.php?pagename=$matches[1]/$matches[2]','top'); } add_action('init', 'custom_rewrite_basic');,然后当我尝试打开任何页面时它告诉我“致命错误:调用 D:\Hosting\2947632\html\mywebsite\wp- 中的未定义函数 add_action()第 13 行包含\functions.php"
  • 你在哪里添加的功能?它必须在主题文件夹内的 functions.php 文件中。
  • 我的错误。我已将该函数添加到我的 wp-includes 文件夹中的 functions.php 文件中。所以我删除了它并将其添加到我的主题/mytheme 文件夹中的 functions.php 中。没有致命错误。我去了设置>永久链接并保存它以刷新我的永久链接-但什么也没有。没有变化。相同的旧 URL 结构。我什至设置了一个“动物”页面作为父级,并添加了一个“狮子”和“斑马”页面作为子级。它仍然使用 url 将它们拉起来:Animals/Zebras/。
  • 你能用调试栏插件检查查询字符串和匹配的重写规则吗?我的猜测是 wordpress 已经将“page”变量用于分页。
  • 好的,我搞定了。我扔了一些不需要的东西。将add_rewrite_rule('^([\w\d\-]*)(?:\.aspx)?(?:\?page=)?([\w\d\-]*)(?:.*)$','index.php?pagename=$matches[1]/$matches[2]','top'); 直接添加到主题的functions.php 并刷新了永久链接。现在,当我转到thesite.com/Animals.aspx?page=Lion 时,它却给了我thesite.com/Animals.aspx/?page=Lion。它从 Animals 加载内容,而不是从 Lion。
猜你喜欢
  • 1970-01-01
  • 2010-10-07
  • 1970-01-01
  • 1970-01-01
  • 2011-11-18
  • 2012-05-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多