为了进行比较,我在dog
具有两个自定义字段dog_colour
和分类法dog_colour
.
将这两个列添加为admin列后,我们可以得到:
分类术语会自动与查询变量链接,因此单击其中一个会转到URL,如
http://example.com/wp-admin/edit.php?post_type=dog&dog_colour=red 只显示那些带有红色的狗。
对于你的数据,分类法似乎是正确的选择:所有的狗都有一种颜色,而颜色是你可能想要列出狗的依据。
但是,在其他一些用例中,自定义字段是合适的,并且您可能希望在“管理”列中单击该字段,以显示所有具有该字段值的帖子,所以下面。。。
与分类法不同,自定义字段不会自动获取查询变量,因此我们添加了这样一个变量:
function wpse331647_custom_query_vars_filter( $vars ) {
$vars[] .= \'dogcolour\';
$vars[] .= \'dogbreed\';
return $vars;
}
add_filter( \'query_vars\', \'wpse331647_custom_query_vars_filter\' );
现在,使用调用URL
?dogcolour=red
将设置一个名为
dogcolour
具有值
red
在WP查询中。
然后,我们需要修改WP查询,以在存在该变量时考虑该变量,但仅在admin中,并且仅在查询用于狗时考虑该变量:
add_action( \'pre_get_posts\', \'wpse331647_alter_query\' );
function wpse331647_alter_query( $query ) {
if ( !is_admin() || \'dog\' != $query->query[\'post_type\'] )
return;
if ( $query->query_vars[\'dogcolour\'] ) {
$query->set( \'meta_key\', \'dog_colour\' );
$query->set( \'meta_value\', $query->query_vars[\'dogcolour\'] );
}
if ( $query->query_vars[\'dogbreed\'] ) {
$query->set( \'meta_key\', \'dog_breed\' );
$query->set( \'meta_value\', $query->query_vars[\'dogbreed\'] );
}
}
现在,如果我们去
http://example.com/wp-admin/edit.php?post_type=dog&dogcolour=red 我们得到:
最后一步是修改当前将字段添加到管理列的方式,以便字段值与查询字符串中的正确值链接。
您当前拥有:
echo \'<a href=http://localhost/wordpress/wp-admin/edit.php? dogcolour=\' . $x . \'>\' . $x . \'</a>\';
请尝试以下操作:
echo \'<a href="\';
echo admin_url( \'edit.php?post_type=dog&dogcolour=\' . urlencode( $x ) );
echo \'">\';
echo $x;
echo \'</a>\';
[仅打断成单独的行以帮助易读]
PHP的urlencode()
为您处理元值中的空格,甚至URL。WP的admin_url()
将为您处理正确的域、协议/方案和管理员路径。
当然,您可以通过使用post类型查询变量而不是硬编码来使代码更加通用。