Benutzerdefinierter Beitragstyp single- {custom} .php funktioniert nicht


18

Ich habe einen benutzerdefinierten Post-Typ mit dem Maschinennamen special_media_post erstellt und wordpress sieht die single-special_media_post.php einfach nicht. Ich bin völlig am verlieren. Es bleibt standardmäßig die index.php

Hier ist mein Code für meinen benutzerdefinierten Beitragstyp und seine Taxonomien:

//Post and Taxonomy stuff
//Register Custom Post Type
function special_media_post() {
$labels = array(
    'name'                => _x( 'Media Posts', 'Post Type General Name', 'text_domain' ),
    'singular_name'       => _x( 'Media Post', 'Post Type Singular Name', 'text_domain' ),
    'menu_name'           => __( 'Media Post', 'text_domain' ),
    'parent_item_colon'   => __( 'Media Post:', 'text_domain' ),
    'all_items'           => __( 'All Media Posts', 'text_domain' ),
    'view_item'           => __( 'View Media Post', 'text_domain' ),
    'add_new_item'        => __( 'Add New Media Post', 'text_domain' ),
    'add_new'             => __( 'New Media Post', 'text_domain' ),
    'edit_item'           => __( 'Edit Media Post', 'text_domain' ),
    'update_item'         => __( 'Update Media Post', 'text_domain' ),
    'search_items'        => __( 'Search Media Posts', 'text_domain' ),
    'not_found'           => __( 'No media posts found', 'text_domain' ),
    'not_found_in_trash'  => __( 'No media posts found in Trash', 'text_domain' ),
);

$rewrite = array(
    'slug'                => 'mediapost',
    'with_front'          => true,
    'pages'               => true,
    'feeds'               => true,
);

$args = array(
    'label'               => __( 'mediapost', 'text_domain' ),
    'description'         => __( 'Post Type for Media', 'text_domain' ),
    'labels'              => $labels,
    'supports'            => array( 'title', 'editor', 'custom-fields', ),
    'taxonomies'          => array( 'year', 'type' ),
    'hierarchical'        => false,
    'public'              => true,
    'show_ui'             => true,
    'show_in_menu'        => true,
    'show_in_nav_menus'   => true,
    'show_in_admin_bar'   => true,
    'menu_position'       => 5,
    'can_export'          => true,
    'has_archive'         => true,
    'exclude_from_search' => false,
    'publicly_queryable'  => true,
    'query_var'           => 'mediapost',
    'rewrite'             => $rewrite,
    'capability_type'     => 'page',
);

register_post_type( 'special_media_post', $args );
}

// Register Custom Taxonomy
function media_year()  {
$labels = array(
    'name'                       => _x( 'Years', 'Taxonomy General Name', 'text_domain' ),
    'singular_name'              => _x( 'Year', 'Taxonomy Singular Name', 'text_domain' ),
    'menu_name'                  => __( 'Year', 'text_domain' ),
    'all_items'                  => __( 'All Years', 'text_domain' ),
    'parent_item'                => __( 'Parent Year', 'text_domain' ),
    'parent_item_colon'          => __( 'Parent Year:', 'text_domain' ),
    'new_item_name'              => __( 'New Year Name', 'text_domain' ),
    'add_new_item'               => __( 'Add New Year', 'text_domain' ),
    'edit_item'                  => __( 'Edit Year', 'text_domain' ),
    'update_item'                => __( 'Update Year', 'text_domain' ),
    'separate_items_with_commas' => __( 'Separate years with commas', 'text_domain' ),
    'search_items'               => __( 'Search years', 'text_domain' ),
    'add_or_remove_items'        => __( 'Add or remove years', 'text_domain' ),
    'choose_from_most_used'      => __( 'Choose from the most used yearss', 'text_domain' ),
);

$rewrite = array(
    'slug'                       => 'year',
    'with_front'                 => true,
    'hierarchical'               => true,
);

$capabilities = array(
    'manage_terms'               => 'manage_categories',
    'edit_terms'                 => 'manage_categories',
    'delete_terms'               => 'manage_categories',
    'assign_terms'               => 'edit_posts',
);

$args = array(
    'labels'                     => $labels,
    'hierarchical'               => true,
    'public'                     => true,
    'show_ui'                    => true,
    'show_admin_column'          => true,
    'show_in_nav_menus'          => true,
    'show_tagcloud'              => true,
    'query_var'                  => 'year',
    'rewrite'                    => $rewrite,
    'capabilities'               => $capabilities,
);

register_taxonomy( 'year', 'special_media_post', $args );
}

// Register Custom Taxonomy
function media_type()  {
$labels = array(
    'name'                       => _x( 'Types', 'Taxonomy General Name', 'text_domain' ),
    'singular_name'              => _x( 'Type', 'Taxonomy Singular Name', 'text_domain' ),
    'menu_name'                  => __( 'Type', 'text_domain' ),
    'all_items'                  => __( 'All Types', 'text_domain' ),
    'parent_item'                => __( 'Parent Type', 'text_domain' ),
    'parent_item_colon'          => __( 'Parent Type:', 'text_domain' ),
    'new_item_name'              => __( 'New Type Name', 'text_domain' ),
    'add_new_item'               => __( 'Add New Type', 'text_domain' ),
    'edit_item'                  => __( 'Edit Type', 'text_domain' ),
    'update_item'                => __( 'Update Type', 'text_domain' ),
    'separate_items_with_commas' => __( 'Separate types with commas', 'text_domain' ),
    'search_items'               => __( 'Search types', 'text_domain' ),
    'add_or_remove_items'        => __( 'Add or remove types', 'text_domain' ),
    'choose_from_most_used'      => __( 'Choose from the most used types', 'text_domain' ),
);

$rewrite = array(
    'slug'                       => 'type',
    'with_front'                 => true,
    'hierarchical'               => true,
);

$capabilities = array(
    'manage_terms'               => 'manage_categories',
    'edit_terms'                 => 'manage_categories',
    'delete_terms'               => 'manage_categories',
    'assign_terms'               => 'edit_posts',
);

$args = array(
    'labels'                     => $labels,
    'hierarchical'               => true,
    'public'                     => true,
    'show_ui'                    => true,
    'show_admin_column'          => true,
    'show_in_nav_menus'          => true,
    'show_tagcloud'              => true,
    'query_var'                  => 'media_type',
    'rewrite'                    => $rewrite,
    'capabilities'               => $capabilities,
);

register_taxonomy( 'type', 'special_media_post', $args );
}

// Hook into the 'init' action
add_action( 'init', 'special_media_post', 0 );

// Hook into the 'init' action
add_action( 'init', 'media_year', 0 );

// Hook into the 'init' action
add_action( 'init', 'media_type', 0 );

Wenn es noch etwas gibt, das Sie sehen müssen, kann ich es aufstellen, aber es wird nicht einmal angezeigt, wenn ich dort ein Echo "Hallo Welt" anbringe. Es wird also einfach weder die single-special_media_post.php noch die archive-special_media_post.php angezeigt

Antworten:


57

Besuchen Sie die Permalinks-Seite (die es löschen wird) und überprüfen Sie es erneut. WordPress muss wahrscheinlich nur angestupst werden, um Ihre Hinzufügung zur Hierarchie zu erkennen.


2
Beeindruckend! funktioniert wie Charme, verschwendet 1 Stunde :(
Mohammed Sufian

5

Ändern Sie den Code

Von :

 'has_archive'         => true,

An:

 'has_archive'         => false,

Und dann gehe zur Permalink-Seite, ändere die Standardeinstellung und gehe zurück zu deinem "hübschen Permalink"

%Anschriftname%/

Jetzt sollte es klappen.

Der Grund, warum die Seite single- {custom_post_type} .php nicht aufgerufen wird, liegt am has_archive. Wenn has_archive auf true gesetzt ist, wird anstelle der einzelnen Seite nach archive- {custom_post_type} .php gesucht.

Hoffe das hat funktioniert.


1
Ich bin mir nicht sicher, ob das stimmt. Eine einzelne Beitragsansicht ist eine einzelne Beitragsansicht, unabhängig davon, ob der Beitragstyp Archivindexansichten unterstützt oder nicht.
Chip Bennett

Diese Lösung, die ich gepostet habe, ist, wie ich mein Problem mit meinem selbst entwickelten Thema gelöst habe. Wann meine einzelne Beitragstyp-Seite mir jetzt zeigen würde, was ich sehen wollte.
Wesley Cheung

3
Es ist möglich, dass das Update die Permalink-Struktur zurücksetzt, wodurch wiederum die Umschreiberegeln gelöscht wurden.
Chip Bennett

2
Die Einstellung 'has_archive' hat keine Auswirkung darauf, ob die single- {post_type} .php-Vorlage für eine einzelne Anfrage verwendet wird oder nicht.
Jules

Klappt wunderbar. Danke Kumpel!
user1202416

1

Es ist eine gute Praxis, auch das register_activation_hook()und register_deactivation_hook()beim Erstellen neuer Inhaltstypen zu verwenden.

Es scheint, dass neue Inhaltstypen immer nicht neu geschrieben werden können. Um dies zu vermeiden, rufen Sie in register_activation_hook () die Funktion flush_rewrite_rules()und Ihre Registrierung für neue Inhalte auf. Ich weiß nicht warum, aber dies scheint dieses Problem zu vermeiden. Aussehen:

register_activation_hook( __FILE__, 'your_active_hook' );

function your_active_hook() {
    special_media_post();
    flush_rewrite_rules();
}

0

Ich habe Ihren Code kopiert, die Umschreiberegeln über den Admin gelöscht und jetzt verwendet das Theme die richtigen Vorlagen, wenn ich einen Medienbeitrag besuche.

Sie müssen die Umschreiberegeln einmal mit dem after_switch_theme-Hook leeren. Dadurch wird sichergestellt, dass die Umschreiberegeln automatisch gelöscht werden, nachdem der Benutzer das Design aktiviert hat.

Sie können diesen Code verwenden (direkt aus dem Codex):

add_action( 'init', 'theme_prefix_cpt_init' );
function theme_prefix_cpt_init() {
    register_post_type( ... );
}

function theme_prefix_rewrite_flush() {
    flush_rewrite_rules();
}
add_action( 'after_switch_theme', 'theme_prefix_rewrite_flush' );

Weitere Informationen finden Sie im WordPress-Codex: http://codex.wordpress.org/Function_Reference/register_post_type

BEARBEITEN: In einem solchen Fall ist das Inspect Rewrite Rules Plugin sehr praktisch, da Sie die mit Ihrem benutzerdefinierten Beitragstyp verbundenen Regeln anzeigen können: http://wordpress.org/extend/plugins/rewrite-rules-inspector/

Bitte beachten Sie auch, dass der empfohlene Ort zum Einfügen von benutzerdefinierten Beitragstypen ein Plugin und kein Thema ist.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.