我正在努力解决这个问题或者找到答案,所以我在这里。我将标签排除功能拼接在一起也阻止了带有此标签的自定义帖子在管理员的相应帖子页面上显示。如何调整功能以允许显示这些自定义帖子?
function exclude_post_by_tag( $query ) {
$excluded_tag_ids = array(47);
if ( $query->is_main_query() ) {
if ( ( $query->is_home() || $query->is_category() ||
$query->is_archive() || $query->is_feed() || $query->is_single() &&
!has_post_format( 'image' ) ) || ( !is_admin() &&
!$query->is_search() ) ) {
$query->set('tag__not_in', $excluded_tag_ids);
} else if ( $query->is_single() ) {
if ( ( $query->query_vars['p'] ) ) {
$page= $query->query_vars['p'];
} else if ( isset( $query->query_vars['name'] ) ) {
$page_slug = $query->query_vars['name'];
$post_type = 'post';
global $wpdb;
$page = $wpdb->get_var( $wpdb->prepare( "SELECT ID FROM $wpdb->posts WHERE post_name = %s AND post_type= %s AND post_status = 'publish'", $page_slug, $post_type ) );
}
if ( $page ) {
$post_tags = wp_get_post_tags( $page );
foreach ($excluded_tag_ids as $tag_id ) {
if ( in_array( $tag_id, $post_tags ) ) {
$query->set( 'p', -$tag_id );
break;
}
}
}
}
}
}
add_action( 'pre_get_posts', 'exclude_post_by_tag' );
我使用的自定义帖子类型称为data
,帖子使用的标准为'发布格式。
非常感谢阅读,我希望有人可以提供帮助。
答案 0 :(得分:2)
在您的函数开始时,通过检查是否在管理上下文中止执行:
function exclude_post_by_tag( $query ) {
if( is_admin() )
return;
// rest of the code here
}
add_action( 'pre_get_posts', 'exclude_post_by_tag' );
答案 1 :(得分:0)
我刚刚找到了答案。我只需要改变:
add_action( 'pre_get_posts', 'exclude_post_by_tag' );
为:
if( !is_admin() ){
add_action( 'pre_get_posts', 'exclude_post_by_tag' );
}
以防止它影响管理页面。呼!