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.
<title>
y<h1>Heading</h1>
obtendrá solo una de ellas en una página de archivo, pero tiene una para cada una de las páginas de preguntas frecuentes individuales. Estoy de acuerdo en que todo el contenido de preguntas frecuentes es mejor en la página de archivo, pero puede proporcionar todo el contenido en la página principal y una página de desglose para aquellos que lo deseen (que incluye motores de búsqueda) , y ciertamente no hace daño; simplemente agregue un "Enlace permanente" cerca de la pregunta frecuente.unset($wp_rewrite->extra_permastructs['faq'])
" que, por supuesto, estoy argumentando que no usa. :)