当我转到url时mysite.com/photos/120
我想得到120
出来
在PHP中,我希望能够像url一样获取这些“参数”mysite.com?page=photos&id=120
甚至只是mysite.com/photos?id=120
我可以利用rewrite rules? 或者我需要做什么regex 在php中获得我想要的?
****编辑1****
就我个人而言,我无法让这项工作发挥作用。根据这里给出的答案,我得到了如下结论:
add_action( \'init\', \'rewrite_photo_url\' );
function rewrite_photo_url() {
add_rewrite_rule( \'^photos/([^/]*)/?\',\'index.php?page=photos&photo_id=$matches[1]\', \'top\' );
}
add_rewrite_tag(\'%id%\',\'([0-9]+)\');
print(get_query_var(\'photo_id\'));
我怀疑我在什么地方遗漏了一个概念?
****编辑2****
我开始意识到这可能需要在函数中实现。php所以我现在有:
function rewrite_photo_url() {
add_rewrite_rule( \'^photos/([^/]*)/?\',\'index.php?page=photos&photo_id=$matches[1]\', \'top\' );
}
function register_custom_query_vars( $vars ) {
array_push( $vars, \'photo_id\' );
return $vars;
}
add_action( \'init\', \'rewrite_photo_url\');
add_filter( \'query_vars\', \'register_custom_query_vars\', 1 );
现在我只需要知道如何在页面模板中获取所需的var。我试过了
print(get_query_var(\'photo_id\'));
但这并没有奏效。
SO网友:Rachel Carden
您可以添加自己的重写规则,该规则将允许您通过URL参数调整查询:
add_action( \'init\', \'rewrite_photo_url\' );
function rewrite_photo_url() {
add_rewrite_rule( \'photos/([^/]+)/?$\',\'index.php?page=photos&photo_id=$matches[1]\', \'top\' );
}
如果需要使用自定义变量,即“photo\\u id”,则必须注册该变量,以便查询能够识别该变量:
add_filter( \'query_vars\', \'register_custom_query_vars\', 1 );
function register_custom_query_vars( $vars ) {
array_push( $vars, \'photo_id\' );
return $vars;
}
SO网友:Stephen Harris
您可以使用add_rewrite_tag
要注册自定义查询变量(“id”),请执行以下操作:
add_rewrite_tag(\'%id%\',\'([0-9]+)\');
(regex告诉它只接受数字)。然后,要创建重写规则,可以使用
add_rewrite_rule
(这两个都应连接到init
).
add_rewrite_rule(\'^photos/([0-9]+)/?\',\'index.php?p=1234&id=$matches[1]\',\'top\');
其中1234是“照片”页面的ID。添加这些规则后,需要刷新一次重写规则(转到永久链接设置页面)。然后作为
@DanielBachhuber 说,你可以用掉
get_query_var( \'id\' )
获取ID。
Note, 而regex在add_rewrite_tag
意味着这将只接受数字-您可能仍应使用intval
(在任何情况下,它都可以是数字的字符串表示)。
SO网友:Tsegereda Mulugeta
嗨,伙计们,这对我来说很有用:
$pagination_args = array(
\'base\' => user_trailingslashit( trailingslashit( remove_query_arg( \'s\', strtok(get_pagenum_link( 1 ), \'?\') ) ) . \'page/%#%/\'.rtrim(str_replace(\'%2F\',\'\',substr(get_pagenum_link( 1 ),strlen(strtok(get_pagenum_link( 1 ), \'?\')))),\'/\'), \'paged\' ),
\'format\' => \'page/%#%\',
\'total\' => $numpages,
\'current\' => $paged,
\'show_all\' => False,
\'end_size\' => 1,
\'mid_size\' => $pagerange,
\'prev_next\' => True,
\'prev_text\' => __(\'«\'),
\'next_text\' => __(\'»\'),
\'type\' => \'plain\',
\'add_args\' => false,
\'add_fragment\' => \'\'
);
基本值是真正起作用的魔法。无需对基值进行任何更改。通过阅读这篇帖子,我找到了正确的方向:
https://wordpress.org/support/topic/plugin-simple-pagination-page2-and-_get-parameters