我的主题中有一个自定义的帖子类型,叫做公文包。它的类别称为项目类别。我正在尝试排除已登录成员的项目类别。我的第一个问题是,我能像引用普通帖子类别一样引用项目类别吗?
到目前为止,这是我的代码,但它不起作用。我已经通读了法典,但我想我遗漏了一些东西。预编码器
function exclude_category( $query ) {
if ( is_user_logged_in() && $query->is_main_query() ) {
$query->set( 'cat', '-94');
}
}
add_action( 'pre_get_posts', 'exclude_category' );
以下是自定义帖子类型的分类
#-----------------------------------------------------------------#
# Taxonomy attached to portfolio
#-----------------------------------------------------------------#
$category_labels = array(
'name' => __( 'Project Categories', NECTAR_THEME_NAME),
'singular_name' => __( 'Project Category', NECTAR_THEME_NAME),
'search_items' => __( 'Search Project Categories', NECTAR_THEME_NAME),
'all_items' => __( 'All Project Categories', NECTAR_THEME_NAME),
'parent_item' => __( 'Parent Project Category', NECTAR_THEME_NAME),
'edit_item' => __( 'Edit Project Category', NECTAR_THEME_NAME),
'update_item' => __( 'Update Project Category', NECTAR_THEME_NAME),
'add_new_item' => __( 'Add New Project Category', NECTAR_THEME_NAME),
'menu_name' => __( 'Project Categories', NECTAR_THEME_NAME)
);
register_taxonomy("project-type",
array("portfolio"),
array("hierarchical" => true,
'labels' => $category_labels,
'show_ui' => true,
'query_var' => true,
'rewrite' => array( 'slug' => 'project-type' )
));
$attributes_labels = array(
'name' => __( 'Project Attributes', NECTAR_THEME_NAME),
'singular_name' => __( 'Project Attribute', NECTAR_THEME_NAME),
'search_items' => __( 'Search Project Attributes', NECTAR_THEME_NAME),
'all_items' => __( 'All Project Attributes', NECTAR_THEME_NAME),
'parent_item' => __( 'Parent Project Attribute', NECTAR_THEME_NAME),
'edit_item' => __( 'Edit Project Attribute', NECTAR_THEME_NAME),
'update_item' => __( 'Update Project Attribute', NECTAR_THEME_NAME),
'add_new_item' => __( 'Add New Project Attribute', NECTAR_THEME_NAME),
'new_item_name' => __( 'New Project Attribute', NECTAR_THEME_NAME),
'menu_name' => __( 'Project Attributes', NECTAR_THEME_NAME)
);
register_taxonomy('project-attributes',
array('portfolio'),
array('hierarchical' => true,
'labels' => $attributes_labels,
'show_ui' => true,
'query_var' => true,
'rewrite' => array( 'slug' => 'project-attributes' )
));
我没有收到任何错误,但登录时不会排除该类别。
如有任何帮助,我们将不胜感激。感谢
更新:
我也试过这些没有运气
function exclude_category( $query ) {
if ( is_user_logged_in() && $query->is_main_query() ) {
$taxquery = array(
array(
'post_type' => 'portfolio',
'taxonomy' => 'project-type',
'field' => 'id',
'terms' => array( 94 ),
'operator' => 'NOT IN'
)
);
$query->set( 'tax_query', $taxquery);
}
}
add_action( 'pre_get_posts', 'exclude_category' );
这也是
function exclude_category( $query ) {
if ( is_user_logged_in() && $query->is_main_query() ) {
$taxquery = array(
array(
'post_type' => 'portfolio',
'taxonomy' => 'project-type',
'field' => 'slug',
'terms' => 'preview',
'operator' => 'NOT IN'
)
);
$query->set( 'tax_query', $taxquery);
}
}
add_action( 'pre_get_posts', 'exclude_category' );
添加tax_query参数。
function exclude_category( $query ) {
if ( is_user_logged_in() && $query->is_main_query() ) {
$taxquery = array(
'taxonomy' => 'project-type',
'field' => 'id',
'terms' => array( 94 ),
'operator' => 'NOT IN'
);
$query->set( 'tax_query', $taxquery);
}
}
add_action( 'pre_get_posts', 'exclude_category' );
由于某种原因,它无法工作。我不知道这个主题是在创建一个新的查询还是什么。这是我用来解决这个问题的逻辑。我给了马克解决方案,因为从技术上讲,这是所问问题的解决方案,但以下是我处理问题的方式。
在无法通过wp查询解决问题后,我决定,由于内容已经使用groups插件进行了保护,我所需要做的就是从我的原始公文包中排除预览类别,然后创建一个预览公文包添加到我的网站导航中。从那里,我可以对登录的用户隐藏预览导航链接,然后真正的投资组合就已经对没有使用groups插件登录的用户进行了隐藏。以下是我实现目标的方法。
我通过自定义链接将预览组合添加到我的主菜单中。我选择了css类屏幕选项,并将登录导航的类添加到预览菜单链接中。
然后我将这个css添加到我的主题中,以对登录用户隐藏预览
.您的导航名称li.logged-in-nav{display:列表项;}
body.logged-in.您的导航名称li.logged-in-nav{display:none;}
用源代码中的菜单名称更改导航名称。然后我所做的就是用groups插件保护我的公文包部分,这样原始的公文包链接就不会显示给未登录的用户。因此,未登录的用户会看到预览链接,而不会看到原始链接,登录的用户则会看到原始公文包,而不会在导航中看到预览链接。
这只是一个关于如何通过wordpress限制登录用户的逻辑示例。希望它能帮助任何试图解决类似问题的人。