我为用户创建了自定义用户分类,并且它对单一分类法有效。
从Bellow参考指南我创建了自定义用户分类。
参考指南: - http://justintadlock.com/archives/2011/10/20/custom-user-taxonomies-in-wordpress
贝娄是分类学的结构
(registered taxonomy) profession
Dietitian (under the profession )
(registered taxonomy) city
NewYork(under the city)
我的slu name名称expert
在这里,我想在Dietitian
city中显示用户为NewYork
的过滤结果。因此,它会显示在个人资料中选择了上述选项的所有用户。
现在我想要的网址类似www.test.com/expert/dietitian/newyork
用户在用户个人资料中选择了Dietitian,NewYork。是否有任何解决方案可以合并Dietitian,NewYork
单个字词的网址如下: - www.test.com/expert/dietitian/
答案 0 :(得分:1)
我假设你花了很多时间在justintadlock的教程上,所以我将只涉及多分类过滤所需的部分内容并在前面展示 - 端。
在阅读长篇文章之前,您可以尝试http://playground.georgemanousarides.com/
所以,首先是第一件事。 单个分类和多个分类的逻辑基础是相同的。 在注册了分类法及其术语并完成了wp-admin所需的所有工作后,我们将需要:
A)一个页面(我们称之为TAX-QUERY PAGE),访问者可以在其中选择分类查询。
B)另一页(我们称之为TAX-RESULTS PAGE),其中将显示TAX-QUERY PAGE的结果。
让我们潜入
TAX-QUERY PAGE
在学习完本教程之后,显示分类法链接的页面应该以其原始形式显示,如下所示:
single taxonomy tax-query page
访客"选择"只需点击提供的链接即可查看哪种分类。
请注意:
A)以下链接:
- 表白如下: www.example.com/user/profession/developer /
- 城市将是: www.example.com/user/city/gotham /
醇>B) slugs" user / city"和"用户/专业"在函数中定义: my_register_user_taxonomy>> register_taxonomy>>重写>>蛞蝓 强>
TAX-RESULTS PAGE
点击上面提到的链接会转到一个页面(当然需要由您定义),该页面显示相同分类术语下的所有用户。
这是通过创建自定义分类模板来实现的。
您可以创建taxonomy-profession-developer.php文件来处理单个分类和术语,或者使用taxonomy-profession.php来处理单个分类法及其所有分类法。所有分类法及其术语的术语或taxonomy.php。
在我看来,如果您不希望您的服务器充斥着由您手动创建的模板文件,您应该使用taxonomy.php并为所有分类法制作一个通用的teplate,从而破坏您的结果想要自动显示。
请注意:
A)要通过用户进行迭代并仅获取所需分类术语下的内容,需要自定义查询(在taxonomy.php文件中),如教程中所述和解释的那样。 / p>
B)永久链接应位于 wp-admin>>的 帖子名称 选项中设置>>永久链接 以便wordpress可以找到您的分类法,获取文件taxonomy.php并提供有关可在taxonomy.php文件中使用的所选分类法的有用信息。
TAX-QUERY PAGE
我们需要创建一个页面,访问者可以从自定义分类中选择术语。此页面将通过链接(作为获取变量**)提供所需条款的TAX-RESULTS PAGE(taxonomy.php),以便进行查询。
**为了在TAX-RESULTS PAGE中有相当的永久链接,我们需要在function.php中添加以下重写函数(找到它here),并刷新wp-admin中的永久链接: / p>
function eg_add_rewrite_rules() {
global $wp_rewrite;
$new_rules = array(
'user/(profession|city)/(.+?)/(profession|city)/(.+?)/?$' => 'index.php?post_type=eg_event&' . $wp_rewrite->preg_index(1) . '=' . $wp_rewrite->preg_index(2) . '&' . $wp_rewrite->preg_index(3) . '=' . $wp_rewrite->preg_index(4),
'user/(profession|city)/(.+)/?$' => 'index.php?post_type=eg_event&' . $wp_rewrite->preg_index(1) . '=' . $wp_rewrite->preg_index(2)
);
$wp_rewrite->rules = $new_rules + $wp_rewrite->rules;
}
add_action( 'generate_rewrite_rules', 'eg_add_rewrite_rules' );
请注意
如果您注册了更多的分类标准,那么" profession | city"在功能应该成为"职业|城市| tax1 | tax2 | tax3"。
所以TAX-QUERY PAGE将是:
<强> HTML 强>
<div id="taxonomies">
<h1>Find your professional</h1>
<form>
<?php if ( $taxonomies = get_object_taxonomies( 'user' ) ) : //get all taxonomies under the object_type "user" ( The second parameter given to the function my_register_user_taxonomy of the tutorial )
foreach ( $taxonomies as $taxonomy ) : ?>
<p>
<ul>
<fieldset id="<?php echo esc_attr( $taxonomy ); ?>"> <!-- group the form by taxonomies -->
<legend><h2>Choose <?php echo $taxonomy; ?></h2></legend>
<?php if ( $terms = get_terms( $taxonomy ) ) : //get taxonomy's terms
foreach ( $terms as $term ) : ?>
<li><input type="checkbox" value="<?php echo esc_attr( $term -> slug ); ?>"> <?php echo $term -> name; ?></li>
<?php endforeach;
endif; ?>
</fieldset>
</ul>
</p>
<?php endforeach;
endif; ?>
</form>
<a id="multiTaxSubmit" href="<?php echo esc_attr( get_home_url() . '/user' ); ?>">SUBMIT</a> <!-- this link is processed by jQuery to provide the taxonomy.php with the proper values. The href attribute is the base url needed by the taxonomy.php -->
</div>
JQUERY (可以放在外部文件中)
$( document ).ready( function() {
$( '#multiTaxSubmit' ).click( function ( event ){
event.preventDefault(); //prevent default link url from loading
var taxQuerySubmit = $( this ),
hasChecked = 0;
querySlug = taxQuerySubmit.attr( 'href' ); //get multitax url base from link href attr
$( '#taxonomies fieldset' ).each( function() { //iterate each taxonomy
var checkedTerms = $( this ).find( 'input:checked' ),
checkedLength = checkedTerms.length; //how many terms has the user selected
if ( checkedLength ) {
hasChecked += checkedLength;
querySlug += '/' + $( this ).attr( 'id' ) + '/'; //add taxonomy slug to query url
checkedTerms.each( function( index, value ) {
var comma = ( index == checkedLength-1 ? '' : ',' );
querySlug += $( this ).val() + comma;
} );
}
} );
if ( hasChecked ) {
window.location = querySlug;
} else {
alert( 'Please enter some criteria.' );
}
} );
} );
TAX-RESULTS PAGE (taxonomy.php)
<?php
$USERS_BY_TAX = array();
if ( $taxonomies = get_object_taxonomies( 'user' ) ) { //get all taxonomies under the object_type "user" ( The second parameter given to the function my_register_user_taxonomy of the tutorial )
foreach ( $taxonomies as $tax_key => $taxonomy ) {
eval( '$check = $' . $taxonomy . ';' ); // Check if the taxonomy exists in the url. eval outputs $check = $profession, $check = $city etc.
if ( !$check ){
unset( $taxonomies[ $tax_key ] );
continue;
}
eval( '$term_names = explode( ",", $' . $taxonomy . ' );' ); // get terms array from $$taxonomy which gives $profession,$city, the values of which are given through the url as such: $profession="designer,developer"
$USERS_BY_TAX[ $taxonomy ] = array();
foreach ( $term_names as $term_name ) {
$term_obj = get_term_by( 'name', $term_name, $taxonomy ); //get term object for each given term
$users_in_term = get_objects_in_term( $term_obj -> term_id, $taxonomy ); // find users with term
if ( !empty( $users_in_term ) ) {
$USERS_BY_TAX[ $taxonomy ] = $USERS_BY_TAX[ $taxonomy ] + array_fill_keys( $users_in_term, $term_name ) ;
}
}
}
}
/* $USERS_BY_TAX array has all the users for each taxonomy but we only need those who exist in all taxonomies */
if ( $taxonomies ) {
$RESULTS = $USERS_BY_TAX; // keep the initiate array intact
$matched = array_pop( $USERS_BY_TAX ); // first array to compare
$TAXS = $taxonomies;
array_pop( $taxonomies );
if ( !empty( $USERS_BY_TAX ) ) {
foreach ( $taxonomies as $taxonomy ) {
if ( !empty( $USERS_BY_TAX ) ) $matched = array_intersect_key( $matched, $USERS_BY_TAX[ $taxonomy ] );
}
}
}
?>
/* DISPLAY */
<?php if ( $matched ) :
foreach ( array_keys( $matched ) as $user_id ): ?>
<div class="user-entry">
<?php echo get_avatar( get_the_author_meta( 'email', $user_id ), '96' ); ?>
<h2><?php the_author_meta( 'display_name', $user_id ); ?></h2>
<?php if ( in_array( 'profession', $TAXS ) ) : ?><h3>Profession: <?php echo $RESULTS[ 'profession' ][ $user_id ]; ?></h3><?php endif;?>
<?php if ( in_array( 'city', $TAXS ) ) : ?><h3>City: <?php echo $RESULTS[ 'city' ][ $user_id ]; ?></h3><?php endif;?>
<?php echo wpautop( get_the_author_meta( 'description', $user_id ) ); ?>
</div>
<?php endforeach;
else: ?>
<div class="user-entry">
<h2>We are sorry. No results match your criteria.</h2>
<h3>Please <a href="javascript:history.back()">go back</a> and search again!</h3>
</div>
<?php endif; ?>
答案 1 :(得分:0)
此重写规则应该有效(假设&#34;专业&#34;&#34; city&#34;是分类法注册名称):
<强>代码:强>
function custom_rewrite_rules() {
add_rewrite_rule('^profession/(.*)/city/(.*)?', 'index.php?profession=$matches[1]&city=$matches[2]', 'top');
}
add_action('init', 'custom_rewrite_rules');
请记住在您的网站中保存此代码后清除重新规则。
答案 2 :(得分:0)
要清除主题或插件中的永久链接或重写规则,您需要使用flush_rewrite_rules()
函数。
<?php
function custom_rewrite_rules() {
flush_rewrite_rules();
add_rewrite_rule( '^products/([^/]*)/([^/]*)/(\d*)?',
'index.php?product_type=$matches[1]&product_brand=$matches[2]&p=$matches[3]',
'top' );
//Post Type: products
//Taxonomy: product_type
//Taxonomy: product_brand
}
add_action('init', 'custom_rewrite_rules');
?>