在Wordpress中,我有三种自定义的帖子类型:展览、书籍、电影。我有一个分类法和两个分类法术语(store-1和store-2),可以应用于所有CPT。
我需要实现的是有一个permalink www.mysite页面。com/exhibitions,其中列出了同时标记了store-1和store-2的帖子,这可以通过CPT轻松完成。然而,我也希望有永久链接,如www.mysite。com/experiments/store-1,其中列出了exhibitions CPT中具有store-1分类法的所有帖子(依此类推,适用于每个CPT和每个分类法术语)。然而,这在permalink中创建了CPT和分类术语的混合,我不知道如何做到这一点。
我的猜测是颠倒逻辑,创建三个自定义分类,分别命名为展览、书籍和电影(当然,我需要将CPT slug更改为CPT展览、CPT书籍和CPT电影),并为每个分类创建术语store-1和store-2。通过这种方式,我将获得永久链接,如www.mysite。com/experiments/store-1。关于永久链接,如www.mysite。com/experiments,我正在考虑创建一个带有slug“experiment”的页面,并为该页面创建一个自定义模板。在模板的php中,我将添加一个循环来获取所有cpt文章,无论分类术语如何。
这不是一个真正干净的解决方案,因为我在后端基本上有三个空页面,仅用于永久链接目的。所以我想知道:是否有一个特定的函数或重写规则来实现我对名为展览、书籍、电影的CPT的需求,并且只对所有CPT应用一个自定义分类法(例如商店)?
谢谢你的见解!
我曾经有过这样的设置,并用一些重写规则解决了它。看看这段代码,它确实提供了您需要的永久链接,但可能需要在您的终端进行一些测试。是的,不要害怕在WordPress中重写规则。虽然有些东西可能要付出代价(例如性能问题),但实际上它们没有什么是你不能做的
add_filter('init', 'create_movies_taxonomies');
add_filter('init', 'create_movies_cpt');
add_action('init', 'movies_rewrite_rules');
add_filter('post_type_link', 'movies_post_permalinks', 10, 2);
/**
* First create Stores taxonomy
*/
function create_movies_taxonomies() {
register_taxonomy('stores', ['movies'],
[
'label' => __('Stores', 'textdomain'),
'public' => true,
'show_in_nav_menus' => false,
'show_ui' => true,
'show_in_menu' => true,
'show_tagcloud' => false,
'show_in_rest' => true,
'hierarchical' => false,
'rewrite' => ['slug' => 'store', 'hierarchical' => false, 'with_front' => false],
'show_admin_column' => true,
'query_var' => true
]
);
}
/**
* Then create Movies CPT with support for Stores and proper rewrites
*/
function create_movies_cpt() {
register_post_type('movies',
[
'label' => __('Movies', 'textdomain'),
'public' => true,
'publicly_queryable' => true,
'show_ui' => true,
'show_in_menu' => true,
'exclude_from_search' => false,
'capability_type' => 'post',
'map_meta_cap' => true,
'show_in_rest' => true,
'hierarchical' => false,
'rewrite' => [
'slug' => '/movies/%stores%',
'with_front' => false,
'feeds' => false
],
'query_var' => true,
'supports' => ['title', 'tags', 'editor', 'comments', 'custom-fields', 'thumbnail'],
'has_archive' => 'movies',
'taxonomies' => ['stores'],
'show_in_nav_menus' => true,
'menu_icon' => 'dashicons-welcome-learn-more',
]
);
}
/**
* Add some rewrite rules for our archives (CPT, taxonomy archive)
*/
function movies_rewrite_rules() {
add_rewrite_rule(
'movies/([a-z]+)/page/?([0-9]{1,})/?$',
'index.php?post_type=movies&stores=$matches[1]&paged=$matches[2]',
'top'
);
add_rewrite_rule(
'movies/([a-z]+)/([a-z0-9_-]+)/?$',
'index.php?post_type=movies&stores=$matches[1]&movies=$matches[2]',
'top'
);
add_filter('query_vars', function($vars) {
$vars[] .= 'stores';
$vars[] .= 'stores-page';
return $vars;
});
}
/**
* Creates beautiful CPT permalinks, like site.com/movies/%term%/%post%/
*
* @param $permalink
* @param $post
*
* @return string|string[]
*/
function movies_post_permalinks($permalink, $post) {
// if it's not our CPT, return regular permalinks
if (strpos($permalink, '%stores%') === false) {
return $permalink;
}
// Get post taxonomy term
$terms = get_the_terms($post, 'stores');
// if a post has a term (store), push it into URL
if ( ! is_wp_error($terms) && ! empty($terms) && is_object($terms[0])) {
$term_slug = array_pop($terms)->slug;
} // if it doesn't, push something there, let it be d
else {
$term_slug = 'd';
}
return str_replace('%stores%', $term_slug, $permalink);
}
本文向大家介绍WordPress 注册自定义帖子类型,包括了WordPress 注册自定义帖子类型的使用技巧和注意事项,需要的朋友参考一下 示例 假设您有一个图书馆网站,并且想要一个名为Books的自定义帖子类型。可以注册为 如此简单,您现在就注册了一个自定义帖子类型。 该代码段可以放在主题functions.php文件中,也可以放在插件结构中。
本文向大家介绍WordPress 3.0中的自定义帖子类型,包括了WordPress 3.0中的自定义帖子类型的使用技巧和注意事项,需要的朋友参考一下 本文与WordPress 3.0相关。此处发布的许多代码在以前的版本中将不起作用,并且某些信息可能会在较新的版本中更改。 WordPress已经在系统中内置了五种不同的内容类型。 帖子 这是标准的内容类型,通常是博客安装中使用最多的内容。帖子往往会
我有一个自定义的帖子类型设置,有许多类别和子类别。 我试图做的是创建一个页面,显示特定类别中的所有帖子,并使用一个菜单列出所有类别子类别,以便可以过滤帖子。 我已尝试复制存档模板并将其重命名为分类法-(我的自定义分类法)。php,如果我转到slug,它会显示某些帖子,并使用
我试图为自定义帖子类型创建一个页面,但我无法真正实现。以下是我正在尝试的全部内容- 自定义帖子类型注册的functions.php片段 我使用名为单Tutorial.php的模板为这个自定义帖子类型模板。此外,在我的帖子显示中,我使用the_permalink()链接到帖子。 现在考虑一个标题为Test3的帖子现在在我的仪表板上,我看到它的PyMalink AS。 当我回显我得到的_permali
我有一个干净的WordPress安装使用二十一,没有插件或其他修改。该博客包含大约800篇带有相关标签和类别的帖子。 我想将所有这些帖子移动到自定义帖子类型。通过将下面的代码添加到我的functions.php中,我的博客现在已经安装了自定义帖子类型,并且运行良好。 现在,我需要做的就是将常规帖子类型更改为我的自定义帖子类型。我已经设法使用插件转换帖子类型移动帖子,但我的分类没有转换。 我意识到我
我有两个不同类别的自定义帖子类型(公文包),然后我有两个页面显示两个类别的帖子。 我调用页面时的url类似于mysite.com/pagename,其中pagename与公文包类别同名。 我的问题是,当我进入单一公文包时,url会变成mysite.com/portfolio/portfolio-name 有没有办法在url中显示投资组合类别?应该像mysite.com/portfolio-cate
我是WordPress的新手,我正在尝试将纯HTML主题转换为WordPress主题。但我有一个问题,我找不到解决办法。在nav菜单中,我找不到有选择地向WordPress作为菜单生成的和元素添加类的方法。 基本上,我需要为1个深度元素、2个深度元素和3个深度元素设置不同的类,还需要检查项目是否有子元素,然后还需要设置不同的类。 然后,我必须将onhtml脚本放在元素中(我知道这些是按钮,但我认为
我对Magento很陌生。我想在Magento中输入WordPress post和自定义post类型。为此,我安装了Magento WordPress集成扩展。我成功地从WordPress中获取帖子,我在Magento根目录中安装了WordPress,使用的数据库与Magento使用的数据库相同。对于自定义帖子类型,我还购买了帖子类型 现在,我的问题是,如何将自定义帖子类型从WordPress导入