こんにちは@daxitude:
まず、あなたに考え直してもらいましょう。各FAQに個別のFAQページがない場合:
検索エンジン最適化のための表面を減らし、得られる可能性のある潜在的なトラフィックを減らします。
誰かが共有するためにあなたはそれが不可能に特定のなどFacebookやTwitter、上の彼らのネットワークと電子メールおよび/または株を超える友人とよくある質問の直接URLを持っている私はいつも私を許可しないサイトの開発者が不満を感じていたユーザのように(アイテムに移動し、代わりにすべてのアイテムを一覧表示するページにリンクするように強制します。)
ただし、それでもやりたい場合は、次の2つのことを行います。
1.)'post_type_link'
フックを使用する
'post_type_link'
フックを使用して、次の例のようにURLを変更します*(カスタムの投稿タイプはであると想定しています'faq'
)。以下をテーマのfunctions.php
ファイルに追加します。
add_action('post_type_link','yoursite_post_type_link',10,2);
function yoursite_post_type_link($link,$post) {
$post_type = 'faq';
if ($post->post_type==$post_type) {
$link = get_post_type_archive_link($post_type) ."#{$post->post_name}";
}
return $link;
}
2.) unset($wp_rewrite->extra_permastructs['faq'])
これはハックですが、やりたいことをするために必要なハックです。'init'
フックを使用しunset($wp_rewrite->extra_permastructs['faq'])
ます。register_post_type()
追加した書き換えルールを削除します。register_post_type()
あなたと他の人の両方に完全な例を提供できるように、への呼び出しを含めています。
add_action('init','yoursite_init');
function yoursite_init() {
register_post_type('faq',array(
'labels' => array(
'name' => _x('FAQs', 'post type general name'),
'singular_name' => _x('FAQ', 'post type singular name'),
'add_new' => _x('Add New', 'faq'),
'add_new_item' => __('Add New FAQ'),
'edit_item' => __('Edit FAQ'),
'new_item' => __('New FAQ'),
'view_item' => __('View FAQ'),
'search_items' => __('Search FAQs'),
'not_found' => __('No FAQs found'),
'not_found_in_trash' => __('No FAQs found in Trash'),
'parent_item_colon' => '',
'menu_name' => 'FAQs'
),
'public' => true,
'publicly_queryable' => true,
'show_ui' => true,
'show_in_menu' => true,
'query_var' => true,
'rewrite' => array('slug'=>'faqs'),
'capability_type' => 'post',
'has_archive' => 'faqs',
'hierarchical' => false,
'supports' => array('title','editor','author','thumbnail','excerpt')
));
global $wp_rewrite;
unset($wp_rewrite->extra_permastructs['faq']); // Removed URL rewrite for specific FAQ
$wp_rewrite->flush_rules(); // THIS SHOULD BE DONE IN A PLUGIN ACTIVATION HOOK, NOT HERE!
}
それだけです。
もちろん、上記の使用$wp_rewrite->flush_rules()
で'init'
フックがあり、本当に悪い習慣と私が呼ばれる完全な自己完結型のプラグイン実装しましたので、後は実際には行われるべきであるFAQ_Post_Type
右のそれを行うことを。このプラグインは、必要なURLルールを含むFAQ投稿タイプを追加し、それを使用しregister_activation_hook()
て書き換えルールをフラッシュします。アクティベーションは明らかに、テーマのfunctions.php
ファイルで実行できるコードの代わりにプラグインコードを必要とする数少ないものの1つです。
これがFAQ_Post_Type
プラグインのコードです。要件に合わせて自由に変更してください:
<?php
/*
Plugin Name: FAQ Post Type
Description: Answers the question "Custom post type, no need for single view, plus want permalink rewrites that include hash in URI" on WordPress Answers.
Plugin URL: http://wordpress.stackexchange.com/questions/12762/custom-post-type-no-need-for-single-view-plus-want-permalink-rewrites-that-incl
*/
if (!class_exists('FAQ_Post_Type')) {
class FAQ_Post_Type {
static function on_load() {
add_action('post_type_link', array(__CLASS__,'post_type_link'),10,2);
add_action('init', array(__CLASS__,'init'));
}
static function post_type_link($link,$post) {
if ('faq'==$post->post_type) {
$link = get_post_type_archive_link('faq') ."#{$post->post_name}";
}
return $link;
}
static function init() {
register_post_type('faq',array(
'labels' => array(
'name' => _x('FAQs', 'post type general name'),
'singular_name' => _x('FAQ', 'post type singular name'),
'add_new' => _x('Add New', 'faq'),
'add_new_item' => __('Add New FAQ'),
'edit_item' => __('Edit FAQ'),
'new_item' => __('New FAQ'),
'view_item' => __('View FAQ'),
'search_items' => __('Search FAQs'),
'not_found' => __('No FAQs found'),
'not_found_in_trash' => __('No FAQs found in Trash'),
'parent_item_colon' => '',
'menu_name' => 'FAQs'
),
'public' => true,
'publicly_queryable' => true,
'show_ui' => true,
'show_in_menu' => true,
'query_var' => true,
'rewrite' => array('slug'=>'faqs'),
'capability_type' => 'post',
'has_archive' => 'faqs',
'hierarchical' => false,
'supports' => array('title','editor','author','thumbnail','excerpt'),
));
global $wp_rewrite;
unset($wp_rewrite->extra_permastructs['faq']); // Remove URL rewrite for specific FAQ
}
static function activate() {
global $wp_rewrite;
$wp_rewrite->flush_rules();
}
}
FAQ_Post_Type::on_load();
register_activation_hook(__FILE__,array('FAQ_Post_Type','activate'));
}
'init'
必要に応じて、オプション値のチェックを使用して、フラッシュルールを内に保持することもできます。
// Add this code in your 'init' hook at your register_post_type('faq',...)
if (!get_option('faq_rewrite_rules_updated')) {
global $wp_rewrite;
unset($wp_rewrite->extra_permastructs['faq']); // Remove URL rewrite for specific FAQ
$wp_rewrite->flush_rules();
update_option('faq_rewrite_rules_updated',true);
}
あなたの選択。
とにかく、これで対応できないユースケースがあるかどうかをお知らせください。