Hola @daxitude:
Déjame sugerirte primero que reconsideres. Si no tiene páginas de preguntas frecuentes individuales para cada pregunta frecuente:
Reduce su superficie para la optimización de motores de búsqueda y reduce el tráfico potencial que podría obtener, y
Hace imposible que alguien comparta preguntas frecuentes específicas con un amigo por correo electrónico y / o comparta con su red en Facebook, Twitter, etc. (Como usuario, siempre estoy frustrado por los desarrolladores del sitio que no me permiten tener una URL directa a un elemento y en su lugar me obligan a vincular a la página que enumera todos los elementos).
Sin embargo, si aún desea hacerlo, haga dos cosas:
1.) Usa el 'post_type_link'
gancho
Use el 'post_type_link'
enlace para modificar la URL como en el siguiente ejemplo * (supongo que su tipo de publicación personalizada es 'faq'
). Agregue lo siguiente al functions.php
archivo de su tema :
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'])
Este es un truco , pero es un truco obligatorio para hacer lo que quieras. Use un 'init'
gancho para unset($wp_rewrite->extra_permastructs['faq'])
. Elimina la regla de reescritura que register_post_type()
agrega. Incluyo una llamada para register_post_type()
poder proporcionar un ejemplo completo tanto para usted como para otros:
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!
}
Eso es todo.
Por supuesto, el uso anterior de $wp_rewrite->flush_rules()
en un 'init'
gancho es una práctica realmente mala y realmente solo debe hacerse una vez, por lo que he implementado un complemento completo y autónomo llamado FAQ_Post_Type
para hacerlo bien. Este complemento agrega un tipo de publicación de preguntas frecuentes con las reglas de URL que desea y utiliza un register_activation_hook()
para vaciar las reglas de reescritura; la activación es obviamente una de las pocas cosas que requiere código de complemento en lugar de código que puede ejecutarse en el functions.php
archivo de un tema .
Aquí está el código para el FAQ_Post_Type
complemento; no dude en modificar sus requisitos:
<?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'));
}
También podría mantener las reglas de vaciado dentro del 'init'
uso de un cheque para un valor de opción si lo prefiere:
// 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);
}
Tu elección.
De todos modos, avíseme si hay casos de uso que descubra que esto no resuelve.