显示所有帖子的存档,但不显示单个 .php

Show the archive of all the posts but not the single.php

提问人:DanG 提问时间:12/28/2020 最后编辑:DanG 更新时间:1/1/2021 访问量:939

问:

有人可以就最佳行动方案向我提供建议吗?

我为一位专门从事安乐死的兽医创建了一个自定义的 wordpress 主题,他想要一个简单的联系表样式的纪念墙,只需几行纪念文字即可添加客户的缩略图。

所以我创建了一个wordpress目录,(single-memorial.php),它显示(archive-memorial.php)上的自定义帖子。到目前为止一切都很好......

但我只希望 ARCHIVE 被索引和可见。不是单一的纪念.php

在循环中,我没有将帖子磁贴包装在任何the_permalinks中。因此,缩略图不会链接到单个帖子数据,基本上使单个帖子完全孤立,当然除非您猜到了蛞蝓并直接找到了它们。

但是,单个帖子将是可索引的,不是吗,我不想要,我宁愿不需要不必要地设置单个纪念.php的样式 - 因为我不想让任何人看到它们。

由于信息如此之少,它们就不是相关的页面。

那么我怎样才能保持帖子数据公开,以便存档可以工作,但不显示单个纪念.php页面?

我正在考虑在函数文件中使用单个纪念.php的任何单个帖子中的某种通用301重定向到存档或主页??

我可以做一个.htaccess重定向,但我不确定我如何定位正确的帖子,因为我不知道客户创建的网址是他添加新的纪念馆。

非常欢迎建议,提前致谢。

The archive page

// 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' );
wordpress 存档

评论


答:

0赞 amarinediary 12/28/2020 #1

注册自定义帖子类型 (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。

使用 、 、 、 和 参数,我们可以构建您正在寻找的行为。publicexclude_from_searchpublicly_queryableshow_uishow_in_nav_menushas_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...
);

显示存档页面要求用户能够查询帖子类型。未经测试,但应该可以工作。


了解更多信息

评论

0赞 DanG 12/29/2020
太棒了,非常感谢。我现在走在正确的道路上,除了我无法工作的重定向之外,我已经解决了所有问题。
1赞 amarinediary 12/29/2020
很高兴我能帮上忙,我也让你对接受的答案投赞成票。如果您无法弄清楚,您可以就重定向提出一个新问题。@DanG
0赞 amarinediary 12/29/2020
您可以将带有条件语句的重定向粘贴到...无论如何,您应该在回答上一个问题时打开一个新问题。header.php
0赞 DanG 12/29/2020
在上面的编辑器中查看我的函数 php 代码。PHP= 单纪念墙 .php |archive-memorial-wall.php. 如果 'publicly_queryable' => false,则存档消失,因此必须为 true。但是,如果我输入出单个柱子蛞蝓......本地主机:8888/ttsgb/memorial-wall/molly ....我仍然最终在单个帖子上结束。当我宁愿被重定向回:localhost:8888/ttsgb/memorial-wall
0赞 amarinediary 12/29/2020
如果您只是使用自定义查询设置和创建自定义页面怎么办?has_archive => false
0赞 Unce 12/29/2020 #2

您可以将单个页面重定向到存档

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;
    }
}
0赞 DanG 12/29/2020 #3

带有 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' );