如何将自定义帖子显示为页面(但未编辑)?

时间:2017-09-18 作者:J.BizMai

在我的插件(我的第一个插件)中,我插入了2篇带有自定义post\\u类型的帖子(本例中为“foo”)。这种帖子很像一个页面,但没有编辑(所以隐藏在管理界面中)。我希望当用户单击url为:-mysiteurl的按钮时,将此帖子作为页面显示在前端(因此使用模板:page.php)。com?post\\u type=foo&;p=140,其中140是岗位ID。

我得到这个错误

正在尝试获取中非对象的属性。。。\\wordpress\\wp包括\\规范。php在线120

<?php

namespace MyNameSpace\\FrontEnd;

class FrontEnd {

    public function __construct(){

        // Include dependencies
        $this->include_dependencies();

        // Initialize the components
        $this->init();

    }

    private function include_dependencies(){
         ...
    }

    private function init(){


        add_filter( \'template_include\', array( $this, \'foo_subs_form_page_template\'), 99 );
        ...


    }

    public function foo_subs_form_page_template( $template ) {

        if ( is_page( \'foo\' )  ) {
            $new_template = locate_template( array( \'page.php\' ) );
            if ( \'\' != $new_template ) {
                return $new_template;
            }
        }

        return $template;
    }
}
我需要什么?

2 个回复
最合适的回答,由SO网友:J.BizMai 整理而成

我找到了解决办法!要将帖子显示为页面,我需要执行以下步骤:

1) 注册帖子类型

private function init(){
    add_action( \'init\', array( $this, \'create_post_type\') );
}

public function create_post_type() {
    register_post_type( \'foo\',
        array(
            \'labels\' => array(
                \'name\' => __( \'Foos\' ),
                \'singular_name\' => __( \'Foo\' )
            ),
            \'public\' => true,
            \'exclude_from_search\' => true,
            \'has_archive\' => true,
            \'show_in_menu\' => false,
            \'show_in_nav_menus\' => false,
            \'show_in_admin_bar\' => false,
            \'rewrite\' => true //<-- Important !
        )
    );
}
2)选择模板

 private function init(){
    add_action( \'init\', array( $this, \'create_post_type\') );
    add_filter( \'template_include\', array( $this, \'foo_page_template\'), 99 );
}

public function foo_page_template( $template ) {
    if ( get_post_type() === \'foo\' ) {
        $new_template = locate_template( array( \'page.php\' ) );
        if ( \'\' != $new_template ) {
            return $new_template;
        }
    }

    return $template;
}
3)(可选)添加车身类别

add_action( \'body_class\', array($this , \'add_body_classes\' ));

public function add_body_classes( $classes ) {

    // Add custom class
    $classes[] = \'page\';
    $classes[] = \'page-two-column\';

    return $classes;
}
href已由更改mysiteurl.com/foo/my-post-name 如果你不忘记的话,那就行了\'rewrite\' => true 当您使用register_post_type() !

SO网友:WebElaine

使用page.php 具体来说,您可以使用template_include filter.

你也可以复制page.php 在主题中,将其另存为single-foo.php, 然后,它将用于你的“foo”CPT的个人帖子。您可能希望在自定义主题或子主题中执行此操作,而不是直接编辑父主题,以便无论何时更新主题,都不会丢失此编辑。

结束

相关推荐

Custom Feed URLs

我正在为我的一个帖子类型创建一个自定义提要,并允许用户设置该提要的名称。http://www.mysite.com/feed/userdefinedname现在,我还想让用户不仅可以显示该CPT中的所有帖子,还可以按类别过滤它们。目前情况是这样的:http://www.mysite.com/feed/testcategory然而,如果我能将其结构如下,我会非常喜欢它:http://www.mysite.com/feed/userdefinedname/testcategory这可能吗?下面是生成这些基于类