Parece que necesita "reglas parciales de reescritura detallada". Las reglas detalladas de reescritura significan que todas las páginas se colocan en la parte superior porque WordPress no puede descubrir la diferencia entre una página y una publicación. Aquí cree que puede, porque todas las URL del formulario portfolio/([^/]+)/
son de su portfolio
taxonomía, excepto esta portfolio/clients/
. Tendrá que ponerlo encima de las reglas de reescritura, para que coincida antes de la taxonomía de cartera más genérica. Probablemente también podría forzar que todas las reglas de reescritura sean detalladas, pero eso afectará el rendimiento si tiene muchas páginas.
Esta respuesta está escrita con mi comprensión recién obtenida de las reglas de reescritura, así que espero que sea una buena manera de hacerlo y que el código de ejemplo no contenga demasiados errores.
Una página no genera una sola regla de reescritura, genera un grupo:
(pagename)/trackback/?$
(pagename)/feed/(feed|rdf|rss|rss2|atom)/?$
(pagename)/(feed|rdf|rss|rss2|atom)/?$
(pagename)/page/?([0-9]{1,})/?$
(pagename)/comment-page-([0-9]{1,})/?$
(pagename)(/[0-9]+)?/?$
No tiene que crearlos usted mismo, puede reutilizar el poder de WP_Rewrite
. Mire su page_rewrite_rules()
método: si estamos en modo detallado, obtiene una lista de todas las páginas (vía page_uri_index()
) y sus archivos adjuntos, sobrescribe la %pagename%
etiqueta de reescritura y genera las reglas de reescritura para esta página. También podemos hacer esto:
// We only generate them for this page
$page_uri = 'portfolio/clients';
// Returns site root + '%pagename%'
$page_structure = $wp_rewrite->get_page_permastruct();
// Everywhere you see %pagename% in the structure used to generate rules
// in the next step, replace it with our fixed page name
$wp_rewrite->add_rewrite_tag('%pagename%', "({$page_uri})", 'pagename=');
// This generates the group given above
$page_rewrite_rules = $wp_rewrite->generate_rewrite_rules($page_structure, EP_PAGES);
Esto nos dará las reglas para las páginas, pero aún no para los archivos adjuntos utilizados en la página. Si también los quiere, repita el paso para cada archivo adjunto, pero con add_rewrite_tag('%pagename%', "({$attachment_uri})", 'attachment=')
(ver page_rewrite_rules()
para más detalles).
Bien, tenemos las reglas, pero ahora necesita agregarlas a la estructura de reescritura completa de alguna manera. Puede hacer esto con add_rewrite_rule()
, pero debe llamarlo para cada regla generada en la $page_rewrite_rules
matriz. Por esta razón, muchas personas se enganchan en el rewrite_rules_array
filtro , ya que sólo se puede modificar la matriz allí.
add_filter('rewrite_rules_array', 'add_verbose_portfolio_clients_page');
function add_verbose_portfolio_clients_page($rewrite_rules)
{
global $wp_rewrite;
// The previous code snippet comes here, where we generate $page_rewrite_rules
// Our rules have priority, they should be on top
$rewrite_rules = array_merge($page_rewrite_rules, $rewrite_rules);
return $rewrite_rules;
}
Después de incluir este filtro, debe eliminar las reglas de reescritura (una vez, no una cada carga de página, ya que es bastante pesado). Puede hacerlo llamando flush_rewrite_rules()
o visitando la página de configuración de "Permalinks".