提问人:DanG 提问时间:12/28/2020 最后编辑:DanG 更新时间:1/1/2021 访问量:939
显示所有帖子的存档,但不显示单个 .php
Show the archive of all the posts but not the single.php
问:
有人可以就最佳行动方案向我提供建议吗?
我为一位专门从事安乐死的兽医创建了一个自定义的 wordpress 主题,他想要一个简单的联系表样式的纪念墙,只需几行纪念文字即可添加客户的缩略图。
所以我创建了一个wordpress目录,(single-memorial.php),它显示(archive-memorial.php)上的自定义帖子。到目前为止一切都很好......
但我只希望 ARCHIVE 被索引和可见。不是单一的纪念.php
在循环中,我没有将帖子磁贴包装在任何the_permalinks中。因此,缩略图不会链接到单个帖子数据,基本上使单个帖子完全孤立,当然除非您猜到了蛞蝓并直接找到了它们。
但是,单个帖子将是可索引的,不是吗,我不想要,我宁愿不需要不必要地设置单个纪念.php的样式 - 因为我不想让任何人看到它们。
由于信息如此之少,它们就不是相关的页面。
那么我怎样才能保持帖子数据公开,以便存档可以工作,但不显示单个纪念.php页面?
我正在考虑在函数文件中使用单个纪念.php的任何单个帖子中的某种通用301重定向到存档或主页??
我可以做一个.htaccess重定向,但我不确定我如何定位正确的帖子,因为我不知道客户创建的网址是他添加新的纪念馆。
非常欢迎建议,提前致谢。
// Memorials Custom Post Type
function memorials_custom_post() {
$args = array(
'labels' => array(
'name' => 'Memorials',
'singular_name' => 'Memorial'
),
'show_ui' => true,
'show_in_nav_menus' => true,
'has_archive' => true,
'supports' => array(
'title', 'editor', 'thumbnail', 'post-formats'),
'description' => 'Pet memorial catalogue',
'hierarchical' => true,
'show_in_nav_menus' => true,
'exclude_from_search' => true,
'publicly_queryable' => true,
'menu_position' => 23,
'menu_icon' => 'dashicons-format-quote'
);
register_post_type( 'memorial-wall', $args );
}
add_action( 'init', 'memorials_custom_post' );
// Redirect Memorial Single Custom Post
function redirect_single_memorial_post() {
if ( is_singular( 'memorial' )) {
wp_redirect( get_post_type_archive_link( 'memorial-wall' ), 301 );
exit;
}
}
add_action( 'template_redirect', 'redirect_single_memorial_post' );
答:
注册自定义帖子类型 (CPT) 时,可以指定参数列表。
帖子类型可以支持任意数量的内置核心功能,例如 元框、自定义字段、帖子缩略图、帖子状态、评论、 和更多。
register_post_type( string $post_type, array|string $args = array() )
$args | 描述 |
---|---|
“公共” | (布尔值)帖子类型是打算通过管理界面还是由前端用户公开使用。虽然 $exclude_from_search、$publicly_queryable、$show_ui 和 $show_in_nav_menus 的默认设置继承自 public,但每个设置都不依赖于这种关系,而是控制一个非常具体的意图。默认值为 false。 |
“exclude_from_search” | (布尔值)是否从前端搜索结果中排除具有此帖子类型的帖子。默认值与 $public 相反。 |
“publicly_queryable” | (布尔值)是否可以在前端对 post 类型执行查询,作为 parse_request() 的一部分。 |
“has_archive” | (布尔值/字符串)是否应该有 post 类型的存档,或者如果是字符串,则使用存档 slug。如果启用了$rewrite,将生成正确的重写规则。默认值为 false。 |
“show_ui” | (布尔值)是否在后台生成并允许用于管理此帖子类型的 UI。默认值为 $public。 |
“show_in_nav_menus” | (布尔值/字符串)在管理菜单中显示帖子类型的位置。要正常工作,$show_ui 必须为 true。如果为 true,则帖子类型将显示在其自己的顶级菜单中。如果为 false,则不显示菜单。如果现有顶级菜单的字符串(例如。'tools.php' 或 'edit.php?post_type=page'),帖子类型将作为其子菜单放置。默认值为 $show_ui。 |
使用 、 、 、 和 参数,我们可以构建您正在寻找的行为。public
exclude_from_search
publicly_queryable
show_ui
show_in_nav_menus
has_archive
$args = array(
'public' => false, //Default is false, can be omitted
'show_ui' => true, //Default inherited from public, has to be specified
'show_in_nav_menus' => true, //Default inherited from public, has to be specified
'exclude_from_search' => true, //Default is the opposite value of $public, can be omitted
'publicly_queryable' => true, //Default inherited from public, has to be specified
'has_archive' => true, //Default is false, has to be specified
//...Your other arguments...
);
显示存档页面要求用户能够查询帖子类型。未经测试,但应该可以工作。
了解更多信息
- 了解更多关于
register_post_type
@ https://developer.wordpress.org/reference/functions/register_post_type/
评论
header.php
has_archive => false
您可以将单个页面重定向到存档
add_action( 'template_redirect', 'prefix_redirect_single_cpt' );
// Redirect Memorial CPT
function prefix_redirect_single_cpt() {
if ( is_singular( 'memorial' )) {
wp_redirect( get_post_type_archive_link( 'memorial' ), 301 );
exit;
}
}
带有 301 重定向的 CPT 工作代码(如果在浏览器中正确输入了单个后段),重定向到 CPT 存档。
function custom_post_type() {
$args = array(
'labels' => array(
'name' => 'Memorials',
'singular_name' => 'Memorial'
),
'show_ui' => true,
'show_in_nav_menus' => true,
'has_archive' => true,
'supports' => array(
'title', 'editor', 'thumbnail', 'post-formats'),
'description' => 'Pet memorial catalogue',
'hierarchical' => true,
'show_in_nav_menus' => true,
'exclude_from_search' => true,
'publicly_queryable' => true,
'menu_position' => 23,
'menu_icon' => 'dashicons-format-quote'
);
register_post_type( 'memorial-wall', $args );
}
add_action( 'init', 'custom_post_type' );
// Redirect Single Post Content To Custom Archive
function redirect_to_custom_archive() {
if( is_singular( 'memorial-wall' ) ) {
wp_redirect( home_url( '/memorial-wall/' ), 301 );
exit();
}
}
add_action( 'template_redirect', 'redirect_to_custom_archive' );
下一个:在wordpress循环中计数
评论