以下大部分工作源于previous question / accepted answer. 我正在尝试实现以下permalink结构:
/listings/
/listings/page/2/
/listings/%state%/
/listings/%state%/page/2/
/listings/%state%/property/post-title/
我原以为这将是一项简单的任务,但我不断遇到越来越多的问题。目前,上述所有工作
except pagination.
我的Post Type ()cpt_listings
) 重写如下所示:
\'rewrite\' => array( \'slug\' => \'listings/%tax_states%/property\', \'with_front\' => false )
我的
Taxonomy ()
tax_states
) 重写如下所示:
\'rewrite\' => array( \'slug\' => \'listings\', \'with_front\' => false, \'hierarchical\' => true )
我使用此函数替换
%state%
使用实际的分类术语:
/** Process the State Taxonomy Permalink Tag **/
function state_permalink( $permalink, $post_id, $leavename ) {
if( false === strpos( $permalink, \'%tax_states%\' ) ) {
return $permalink;
}
// Get post
$post = get_post( $post_id );
if( empty( $post ) ) {
return $permalink;
}
// Get taxonomy terms
$terms = wp_get_object_terms( $post->ID, \'tax_states\' );
if( ! is_wp_error( $terms ) && ! empty( $terms ) && is_object( $terms[0] ) ) {
$taxonomy_slug = $terms[0]->slug;
} else {
$taxonomy_slug = \'united-states\';
}
return str_replace( \'%tax_states%\', $taxonomy_slug, $permalink );
}
add_filter(\'post_link\', \'state_permalink\', 10, 3);
add_filter(\'post_type_link\', \'state_permalink\', 10, 3);
最后,我有了这些自定义重写:
/** Rewrites to allow our permalinks to work **/
/** This fixes `/listings/%tax_states%/` **/
/** This fixes `listings/%tax_states%/property/post-title/` **/
function type_tax_rewrites( $rules ) {
$new = array();
$new[\'listings/([^/]+)/property/(.+)/?$\'] = \'index.php?cpt_listings=$matches[2]\';
$new[\'listings/(.+)/?$\'] = \'index.php?tax_states=$matches[1]\';
return array_merge( $new, $rules ); // Ensure our rules come first
}
add_filter( \'rewrite_rules_array\', \'type_tax_rewrites\' );
因为除了分页之外,以上所有的工作都很有效,我觉得我在这里做错了什么。我几乎觉得WordPress应该负责重写,我不需要重写每个场景。
我已经打印了我的$wp_query
在a中template_redirect
钩子以查看查询变量是什么,以及这些变量:
[tax_states] => 2,
[paged] => 0,
所以,
tax_states
正在使用分页变量,我一直在尝试重写它,但我不知道重写系统是如何工作的,正如我前面所说的,如果我甚至必须重写分页,似乎我做错了什么。下面是我在上面附加的重写组合
rewrite_rules_array
挂钩:
$new[\'listings/page/([0-9]+)/?$\'] = \'index.php?paged=$matches[1]\';
$new[\'listings/page/([0-9]+)/?$\'] = \'index.php?tax_states=$matches[1]\';
以上两项似乎都没有什么不同,分页仍然会导致404。
The Core of My Question Is
<我的permalink标记是否正确?有更好/更简单的方法吗如何修复分页并保持上述永久链接结构