我的插件类别的SEO友好URL

时间:2017-06-17 作者:HOY

BOUNTY EDIT :

我有一个插件,它有如下链接:

mydomain。com/wp-content/plugins/myplugin/includes/categories。php?c=9

我希望这些链接对SEO更加友好,并像这样工作:

mydomain。com/wp-content/plugins/myplugin/includes/categories/9/

SOLUTIONS I HAVE TRIED AND FAILED:

该插件使用ajax。我试过使用add_rewrite_rule 如下所示,我的插件具有以下功能:

add_action( \'init\', \'add_alexes_rules\' );
function add_alexes_rules() {
    add_rewrite_rule(\'^categories/([0-9]+)/?$\', \'categories.php?c=$1\', \'top\');
    flush_rewrite_rules();
}
并得知在收到@Milo:

内部规则应指向索引。php

并试图编辑.htaccess 直接但在收到@Deadooshka:

WP使用php服务器变量通过索引处理请求。php,所以规则必须更改该变量。

那么,实现这一目标的方法是什么呢?

EDIT: Jack Johansson\'s SOLUTION

创建了一个php文件:page-custom.php 具体如下:

<?php
/**
 * Template Name: My Custom Template
 */

if (is_page_template( \'page-custom.php\' ) && isset($_REQUEST[\'cat\'])){
    ...
}
?>
使用创建了一个页面ID: 281 其中使用page-custom.php 样板

我的functions.php:

function my_rewrite_tag() {
    add_rewrite_tag(\'%cat%\', \'([^&]+)\');
}
function my_rewrite_rule() {
    add_rewrite_rule(\'^categories/([^/]*)/?\',\'index.php?page_id=281&cat=$matches[1]\',\'top\');
}
add_action(\'init\', \'my_rewrite_tag\', 10, 0);
add_action(\'init\', \'my_rewrite_rule\', 10, 0);
现在,当我导航到下面这样的示例url时

http://localhost/mydomain/categories/123/

问题是$_REQUEST[\'cat\'] 是空的,因此不会进入内部状态page-custom.php

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

我们为什么不创建自己的模板文件,然后在那里做我们的工作呢?下面是我要做的:

创建自定义页面模板调用页面内所需插件的函数将插件URL重定向到页面获取查询变量并处理请求-页面模板让我们创建一个简单的自定义页面模板。我们称之为page-custom.php. 我们将使用此页面与插件进行交互。

<?php
/**
 * Template Name: My Custom Template
 */
 // Our function to get the data
 if (function_exists(\'sample_function\')) sample_function();
?>
我们还在后端创建一个页面,其slug是/my-custom-page/ 其ID为123.

-重写规则现在让我们检查是否在该页面上,并将数据重定向到该页面。

function my_rewrite_tag() {
    add_rewrite_tag(\'%cat%\', \'([^&]+)\');
}
function wallpaperinho_subcat_rewrite_rule() {
    add_rewrite_rule(\'^categories/([^/]*)/?\',\'index.php?page_id=123&cat=$matches[1]\',\'top\');
}
add_action(\'init\', \'my_rewrite_tag\', 10, 0);
add_action(\'init\', \'my_rewrite_rule\', 10, 0);
这段代码的作用是什么?它检查我们是否正在访问/categories/321/ 并将其重定向到我们的页面。现在我们有了所需的数据。让我们检查一下模板。

-我们检查模板的条件是否启用page-custom.php 并将数据返回到页面。

if (is_page_template( \'templates/about.php\' ) && isset($_REQUEST[\'cat\'])){
    function sample_function() { 
        $c = $_REQUEST[\'cat\'];
        // We have the c value, call the internal plugin\'s functions and return its value to the page
        return $data;
    }
}
例如,创建我们自己的模板并使用重定向使其看起来像我们想要的任何东西。它可以而且需要更改以满足您的需要。

SO网友:Morgan Estes

重写规则预计新位置将关闭index.php. 如果您将其更改为\'index.php?pagename=tisort-tasarla\' 只要该页面(或帖子)存在并发布,它就应该工作。

结束