自定义帖子类型主题single.php中显示的单个帖子类型

时间:2018-06-12 作者:Tic Tok Toe

我正在创建一个插件,其中我创建了一个自定义帖子类型的智能事件,我想通过一个页面为该类别下的单个帖子提供服务。这就是为什么我创建了一个名为:single-event.php 直接进入插件文件夹-类似-event > single-event.php

我用这个函数来加载单个页面

function myevent($template) {
if (\'event\' == get_post_type(get_queried_object_id()) && !$template) {
    $template = dirname(__FILE__) . \'/single-event.php\';
}
return $template;
}
add_action( \'single_template\', \'myevent\'));
但这篇文章是在主题单曲中展示的。php页面不在我创建的页面中。

下面是我的CPT寄存器代码,我在permalink设置中刷新了重写模式。

function eventCPT(){
    $labels = array(
        \'name\'               => esc_html__( \'Events\',                   \'event\' ),
        \'singular_name\'      => esc_html__( \'Event\',                    \'event\' ),
        \'menu_name\'          => esc_html__( \'Event\',                \'event\' ),
        \'name_admin_bar\'     => esc_html__( \'Event\',                \'event\' ),
        \'add_new\'            => esc_html__( \'Add New Event\',            \'event\' ),
        \'add_new_item\'       => esc_html__( \'Add New Event\',            \'event\' ),
        \'new_item\'           => esc_html__( \'New Event\',                \'event\' ),
        \'edit_item\'          => esc_html__( \'Edit Event\',               \'event\' ),
        \'view_item\'          => esc_html__( \'View Event\',               \'event\' ),
        \'all_items\'          => esc_html__( \'All Events\',               \'event\' ),
        \'search_items\'       => esc_html__( \'Search Events\',            \'event\' ),
        \'parent_item_colon\'  => esc_html__( \'Parent Events:\',           \'event\' ),
        \'not_found\'          => esc_html__( \'No events found.\',         \'event\' ),
        \'not_found_in_trash\' => esc_html__( \'No events found in Trash.\',\'event\' )
    );

    $args = array(
        \'labels\'             => $labels,
        \'description\'        => __( \'Description.\', \'event\' ),
        \'public\'             => true,
        \'publicly_queryable\' => true,
        \'show_ui\'            => true,
        \'show_in_menu\'       => true,
        \'query_var\'          => true,
        \'rewrite\'            => array( \'slug\' => \'event\' ),
        \'capability_type\'    => \'post\',
        \'has_archive\'        => false,
        \'hierarchical\'       => false,
        \'menu_position\'      => null,
        \'menu_icon\'          => \'dashicons-calendar-alt\',
        \'supports\'           => array( \'title\', \'author\', \'thumbnail\', \'excerpt\', \'comments\' )
    );

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

add_action( \'init\', \'eventCPT\'));

1 个回复
SO网友:Krzysiek Dróżdż

好的,让我们试着在WP代码中找到这个过滤器。。。

在里面wp-includes/template.php 您可以找到:

function get_single_template() {
    $object = get_queried_object();

    $templates = array();

    if ( ! empty( $object->post_type ) ) {
        $template = get_page_template_slug( $object );
        if ( $template && 0 === validate_file( $template ) ) {
            $templates[] = $template;
        }

        $name_decoded = urldecode( $object->post_name );
        if ( $name_decoded !== $object->post_name ) {
            $templates[] = "single-{$object->post_type}-{$name_decoded}.php";
        }

        $templates[] = "single-{$object->post_type}-{$object->post_name}.php";
        $templates[] = "single-{$object->post_type}.php";
    }

    $templates[] = "single.php";

    return get_query_template( \'single\', $templates );
}
And at the end of get_query_template 过滤器的应用方式如下:

return apply_filters( "{$type}_template", $template, $type, $templates );
因此,正如您所看到的,使用一些作为param传递的默认模板来调用过滤器。这意味着你的情况不会是真的:

function myevent( $template ) {
    if (\'event\' == get_post_type(get_queried_object_id()) && !$template) {
        // the part with !$template will be fals, so this code won\'t run
        $template = dirname(__FILE__) . \'/single-event.php\';
    }
    return $template;
}
add_action( \'single_template\', \'myevent\');

结束

相关推荐

WordPress Plugins won't save

我有一个WordPress网站,我刚刚接管了一个客户,因此我没有能力与以前的网站管理员/开发人员交谈。该网站使用的是YOOtheme对Subway稍加修改的版本。为了更新插件位置,Subway的一部分有“小部件选项”。我无法更改外观或小部件显示的页面,因为我无法保存任何内容。它看起来像已保存,但没有保存,或者您会在保存按钮旁边看到“加载循环”,它一直在运行。Things to note:<WordPress和插件是最新的。在我们转移到新服务器之前,插件是可更新的。新服务器有一个max\\u inpu