自定义固定链接标记分页

时间:2015-10-28 作者:Howdy_McGee

以下大部分工作源于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标记是否正确?有更好/更简单的方法吗

1 个回复
最合适的回答,由SO网友:Howdy_McGee 整理而成

多亏了Milo的帮助,问题中的代码最终得以运行:permalinks得到了修复,结构保持了我在上述问题中所希望的状态。

删除了rewrite_rules_array hook将我的分类法注册移到我的帖子类型注册之上,将分类法更改为非层次化\'hierarchical\' => false/parent-term/child-term/ 重写。内置的tag 已经达到了我想要的结构,这就是为什么非等级最终会起作用。

相关推荐

Let me choose permalinks

我需要选择一个叫做“mysite”的永久链接。com/1418”,但wordpress不断在永久链接中添加“-2”。通常这意味着我已经有了一个名为“相同”的页面,它位于垃圾箱或其他地方。但这里的情况似乎并非如此。我尝试在设置中重置永久链接,这也没有帮助。我如何使用数字作为页面名称permalink,而不用wordpress在permalink中添加“-2”。