单一分类附加到多个帖子类型模板问题

时间:2011-01-25 16:51:30

标签: wordpress templates url-rewriting taxonomy custom-post-type

所以我有一个包含大约6种自定义帖子类型的网站。这些帖子类型中的三种附加到单个自定义分类中。

我希望能够在侧边栏中列出list_cats并吐出像 ../% post_type%/%taxonomy%/ 这样的网址,然后将其转到分类标准 - %taxonomy%.php 模板并仅返回%post_type%的结果。

我可以在 taxonomy-%taxonomy%.php 文件中创建一个条件,该条件将读取当前%post_type%并正确设置样式。我需要一些最有效的方法来修改网址,以便将%post_type%传递给查询。

提前致谢。我搜索了几天没有明确答案。

所以这是我对解决方案的微弱尝试,但他们是一个很大的失败 这是基于rlmseo.com蚂蚁在这里找到答案的讨论。

尝试将帖子类型添加到要在查询中使用的变量:

练习区是一种分类法。尝试在taxonomy-practice-areas.php

中添加一个可用于过滤分类的变量
function add_query_vars($aVars) {
    $aVars[] = "cust_pt_var";    // represents the name of the custom post type as shown in the URL
    return $aVars;
}

// hook add_query_vars function into query_vars
add_filter('query_vars', 'add_query_vars');      

function add_rewrite_rules($aRules) {
    $aNewRules = array('practice-areas/([^/]+)/pt/([^/]+)/?$' => 'index.php?practice-areas=$matches[1]&cust_pt_var=$matches[2]');
    $aRules = $aNewRules + $aRules;
    return $aRules;
}

// hook add_rewrite_rules function into rewrite_rules_array
add_filter('rewrite_rules_array', 'add_rewrite_rules')

尝试在重写中传递查询变量

尝试在重写时将查询类型(投资组合和客户)以及练习区分类术语添加到查询中。

function add_rewrite_rules($aRules) {
    $aNewRules = array('portfolio/practice-areas/([^/]+)/?$' => 'index.php?post_type=portfolio&practice-areas=$matches[1]');
    $aNewRules = array('clients/practice-areas/([^/]+)/?$' => 'index.php?post_type=clients&practice-areas=$matches[1]');
    $aRules = $aNewRules + $aRules;
    return $aRules;
}

// hook add_rewrite_rules function into rewrite_rules_array
add_filter('rewrite_rules_array', 'add_rewrite_rules')

2 个答案:

答案 0 :(得分:0)

您应该可以通过修改WP的重写规则来实现这一目标:

add_action( 'init', 'ss_permalinks' );
function ss_permalinks() {
    add_rewrite_rule(
        'page/remove/([^/]+)/?',
        'index.php?pagename=page&service=$matches[1]',
        'top'
);
}
add_filter( 'query_vars', 'ss_query_vars' );
function ss_query_vars( $query_vars ) {
    $query_vars[] = 'removeid';
    return $query_vars;
}

这是不完整的,您需要更改目标网址和规则本身,但这是基础。实施后重新保存固定链接设置一次。 page是要在用户访问此网址时指向的网页标记(在本例中为domain.com/page/remove/432),而$matches[1]应为网址中remove/之后的数字。此数字可通过稍后指定的变量访问,目标页面模板上的$query_vars[] = 'removeid'; /'$ removeid'将是URL中的数字(如果已指定)。

答案 1 :(得分:0)

好的,所以我把重写完全放在一起,然后使用$ _POST解决方案。它工作得非常好,我的网址没有任何污点。

放入目标网页

    <?php
    $myvar = $_POST['formVar'];
    query_posts($query_string . '&post_type='.$myvar );
    ?>

放入原始页面

<!-- The Form: Put this form somewhere on the page: -->

    <form method=post name="post_form" action="">
    <input type="hidden" name="formVar" value="">
    </form>


<!-- The URL: Here I am assigning the Destination URL to a variable.  This can be whatever you want the destination page to be. -->

    <?php                       
    $dest_url = get_bloginfo('url').'/practice-areas/'. $category->slug;
    ?>


<!-- The Link: Here we are assigning 'portfolio' to  'formVar' and setting the form 'action' to the $dest_url value. The title stuff is irrelevant here-->

    <a href="" onclick="document.post_form.formVar.value='portfolio'; document.post_form.action ='<?php $dest_url; ?>'; document.post_form.submit(); return false" title ="<?php sprintf( __( "View all posts in %s" ), $category->name ); ?>" >