将页面用于自定义发布类型

时间:2014-03-04 作者:AndrettiMilas

我在函数中生成了一个自定义的post类型。php。我希望每个帖子都是一个页面,而不是一篇帖子。我怎样才能改变这个?我尝试将“capability\\u type”=>“post”更改为“capability\\u type”=>“page”,但这不起作用。

// LFIO: Custom post type: Case Results
add_action( \'init\', \'register_cpt_result\' );
function register_cpt_result() {
    $labels = array( 

        \'name\' => _x( \'Case Results\', \'result\' ),
        \'singular_name\' => _x( \'Result\', \'result\' ),
        \'add_new\' => _x( \'Add New\', \'result\' ),
        \'add_new_item\' => _x( \'Add New Result\', \'result\' ),
        \'edit_item\' => _x( \'Edit Result\', \'result\' ),
        \'new_item\' => _x( \'New Result\', \'result\' ),
        \'view_item\' => _x( \'View Result\', \'result\' ),
        \'search_items\' => _x( \'Search Case Results\', \'result\' ),
        \'not_found\' => _x( \'No case results found\', \'result\' ),
        \'not_found_in_trash\' => _x( \'No case results found in Trash\', \'result\' ),
        \'parent_item_colon\' => _x( \'Parent Result:\', \'result\' ),
        \'menu_name\' => _x( \'Case Results\', \'result\' ),
    );
    $args = array( 
        \'labels\' => $labels,
        \'hierarchical\' => true,
        \'description\' => \'My firm\\\'s case results\',
        \'supports\' => array( \'title\', \'editor\', \'excerpt\' ),
        \'public\' => true,
        \'show_ui\' => true,
        \'show_in_menu\' => true,

        \'show_in_nav_menus\' => true,
        \'publicly_queryable\' => true,
        \'exclude_from_search\' => true,
        \'has_archive\' => true,
        \'query_var\' => true,
        \'can_export\' => true,
        \'rewrite\' => true,
        \'capability_type\' => \'post\'
    );

    register_post_type( \'result\', $args );
}

4 个回复
最合适的回答,由SO网友:Eric Holmes 整理而成

另一个简单的方法是将其作为single-result.php.

<?php
get_template_part( \'page\' );
这将使用您的page.php 文件,无需复制内容。这样,您就不需要在两个位置进行更改。

SO网友:Dave Romsey

我希望这个特定的自定义帖子类型将使用我的普通页面模板,而不是为它创建一个特殊的模板。

这里有一种方法可以告诉WordPress加载页面。php模板时,您的帖子类型的单个模板通常会显示。有许多方法可以实现这一点,但这种特殊方法的优点是不创建重复的模板,这会带来维护开销。此外,它的性能更高,因为它避免了WP不得不加载额外的模板文件。

add_filter( \'template_include\', \'wpse_136803_template_include\' );
function wpse_136803_template_include( $original_template ) {
  if ( is_singular( \'your_post_type\' ) ) {
    return get_template_directory() . \'/page.php\';
  } else {
    return $original_template;
  }
}
更换your_post_type 使用您的帖子类型的名称。如果需要检查多个帖子类型,可以使用数组。如果使用的是子主题,则可能需要替换get_template_directory() 具有get_stylesheet_directory().

参考文献:

SO网友:K Themes

您可以创建一个名为single result的文件。php,并复制/粘贴页面中的所有代码。php

进一步阅读以充分理解原因:https://codex.wordpress.org/Template_Hierarchy

SO网友:Brad Dalton

另一个包含一些已回答的相同解决方案的选项是:

复制您的页面。php文件重命名为single cpt。php,其中cpt是自定义帖子类型的单数名称,并支持自定义帖子类型代码的页面属性

\'supports\' => array( \'page-attributes\' ),
否则,您将无法在任何单个CPT中获得页面属性。

结束

相关推荐