自定义 post 类型的自定义永久链接
Custom permalink for custom post type
我使用虚假页面和一些插件(如更多类型(用于自定义 post 类型)、高级自定义字段和更多分类法)为 WordPress 网站创建了一个系统。该站点有一个 post 类型的乐队和发行版。
前端的一切都运行良好,如果用户想阅读有关乐队的信息,他单击菜单并最终到达 /band/[bandname]
。如果他想阅读有关发布的信息,他最终会在 /band/[bandname]/releases/[releasename]
.
正如我所说,前端一切正常。但是当我在后端创建一个版本时,我很难将 /band/[bandname]
部分添加到 post 类型版本的永久链接。我尝试使用 /band/%band%/releases/
,但 %band% 将按字面意思写入,因为它不知道从哪里获取乐队名称。有什么想法吗?
我尝试使用此代码。 Band
是发布提交表单中的 post 对象输入。
add_filter('post_type_link', 'custom_permalinks', 10, 3);
function custom_permalinks($permalink, $post, $leavename)
{
$post_id = get_post_meta($_POST['band'], 'bands', true);
if($post->post_type != 'utgivelse' || empty($permalink) || in_array($post->post_status, array('draft', 'pending', 'auto-draft')))
return $permalink;
$var1 = get_post_meta($post_id, 'bands', true);
$var1 = sanitize_title($var1);
$permalink = str_replace('%band%', $var1, $permalink);
return $permalink;
}
你可以这样做:
<?php
add_filter('rewrite_rules_array','customRewriteRules');
add_filter('query_vars','customRewriteVars');
// Remember to flush_rules() when adding rules
add_filter('init','flushRules');
function flushRules(){
global $wp_rewrite;
$wp_rewrite->flush_rules();
}
// Adding a new rule
function customRewriteRules($rules)
{
$newrules = array();
$newrules['bands-page/([^/]+)/([^/]+)/?'] = 'index.php?pagename=bands-page&customvar1=$matches[1]&customvar2=$matches[2]';
$newrules['bands-page/([^/]+)/?'] = 'index.php?pagename=bands-page&customvar1=$matches[1]'; // pagename could be band/
$finalrules = $newrules + $rules;
return $finalrules;
}
function customRewriteVars($vars)
{
array_push($vars, 'customvar1', 'customvar2');
return $vars;
}
您可以根据需要传递任意数量的查询变量,然后使用该变量($_GET['customvar1'])执行自定义循环或类似操作。
通过做一些小的调整,我让它运行良好。我将以下永久链接规则添加到我的 releases
类型中:/band/%band%/releases/
然后我创建了这个来替换永久链接中的变量%band%
:
add_filter('post_type_link', 'custom_permalinks', 10, 3);
function custom_permalinks($permalink, $post, $leavename)
{
$post_id = $post->ID;
if($post->post_type != 'utgivelse' || empty($permalink) || in_array($post->post_status, array('draft', 'pending', 'auto-draft')))
return $permalink;
$var1 = get_the_title(get_post_meta($post_id, 'band', true));
$var1 = sanitize_title($var1);
$permalink = str_replace('%band%', $var1, $permalink);
return $permalink;
}
我使用虚假页面和一些插件(如更多类型(用于自定义 post 类型)、高级自定义字段和更多分类法)为 WordPress 网站创建了一个系统。该站点有一个 post 类型的乐队和发行版。
前端的一切都运行良好,如果用户想阅读有关乐队的信息,他单击菜单并最终到达 /band/[bandname]
。如果他想阅读有关发布的信息,他最终会在 /band/[bandname]/releases/[releasename]
.
正如我所说,前端一切正常。但是当我在后端创建一个版本时,我很难将 /band/[bandname]
部分添加到 post 类型版本的永久链接。我尝试使用 /band/%band%/releases/
,但 %band% 将按字面意思写入,因为它不知道从哪里获取乐队名称。有什么想法吗?
我尝试使用此代码。 Band
是发布提交表单中的 post 对象输入。
add_filter('post_type_link', 'custom_permalinks', 10, 3);
function custom_permalinks($permalink, $post, $leavename)
{
$post_id = get_post_meta($_POST['band'], 'bands', true);
if($post->post_type != 'utgivelse' || empty($permalink) || in_array($post->post_status, array('draft', 'pending', 'auto-draft')))
return $permalink;
$var1 = get_post_meta($post_id, 'bands', true);
$var1 = sanitize_title($var1);
$permalink = str_replace('%band%', $var1, $permalink);
return $permalink;
}
你可以这样做:
<?php
add_filter('rewrite_rules_array','customRewriteRules');
add_filter('query_vars','customRewriteVars');
// Remember to flush_rules() when adding rules
add_filter('init','flushRules');
function flushRules(){
global $wp_rewrite;
$wp_rewrite->flush_rules();
}
// Adding a new rule
function customRewriteRules($rules)
{
$newrules = array();
$newrules['bands-page/([^/]+)/([^/]+)/?'] = 'index.php?pagename=bands-page&customvar1=$matches[1]&customvar2=$matches[2]';
$newrules['bands-page/([^/]+)/?'] = 'index.php?pagename=bands-page&customvar1=$matches[1]'; // pagename could be band/
$finalrules = $newrules + $rules;
return $finalrules;
}
function customRewriteVars($vars)
{
array_push($vars, 'customvar1', 'customvar2');
return $vars;
}
您可以根据需要传递任意数量的查询变量,然后使用该变量($_GET['customvar1'])执行自定义循环或类似操作。
通过做一些小的调整,我让它运行良好。我将以下永久链接规则添加到我的 releases
类型中:/band/%band%/releases/
然后我创建了这个来替换永久链接中的变量%band%
:
add_filter('post_type_link', 'custom_permalinks', 10, 3);
function custom_permalinks($permalink, $post, $leavename)
{
$post_id = $post->ID;
if($post->post_type != 'utgivelse' || empty($permalink) || in_array($post->post_status, array('draft', 'pending', 'auto-draft')))
return $permalink;
$var1 = get_the_title(get_post_meta($post_id, 'band', true));
$var1 = sanitize_title($var1);
$permalink = str_replace('%band%', $var1, $permalink);
return $permalink;
}