OneNav 5.2版本的网址分类筛选BUG问题解决方案

网址分类筛选BUG问题:

打开主题文件夹会吧,找到如下文件 onenav/inc/post-type.php  

在526行的位置找到该代码↓

if ('edit.php' == $pagenow && $filters && isset($_GET[ $filters[0] ]) && $_GET[ $filters[0] ] != '0' ) {

将其替换为:

if ('edit.php' == $pagenow && $filters && isset($_GET[ $filters[1] ]) && $_GET[ $filters[1] ] != '0' ) {

问题解决!如果要添加网址标签分类选项,继续往下↓

添加网址标签分类选项:

忽略第一步,如果已经修改也不用在意,按照如下方式修改:

还是post-type.php这个文件,将第508行这个钩子函数直接替换为:

add_filter('parse_query', function ($query) {  
	if(!is_admin())
		return;
	global $pagenow; 
	global $typenow; 
	$filters = get_object_taxonomies($typenow);
	if ( 'edit.php' == $pagenow && isset($_GET[ 'sites_type' ]) && $_GET[ 'sites_type' ] != '0' ) {
		$position							= $_GET[ 'sites_type' ];
		$query->query_vars[ 'meta_key' ]	 = '_sites_type';
		$query->query_vars[ 'meta_value' ]   = $position;
		$query->query_vars[ 'meta_compare' ] = '=';
	}  
	if ( 'edit.php' == $pagenow && isset($_GET[ 'book_type' ]) && $_GET[ 'book_type' ] != '0' ) {
		$position							= $_GET[ 'book_type' ];
		$query->query_vars[ 'meta_key' ]	 = '_book_type';
		$query->query_vars[ 'meta_value' ]   = $position;
		$query->query_vars[ 'meta_compare' ] = '=';
	}  
	if ('edit.php' == $pagenow && $filters && isset($_GET[ $filters[0] ]) && $_GET[ $filters[0] ] != '0' ) {  
		//$filters = get_object_taxonomies($typenow);  
		foreach ($filters as $tax_slug) {  
			$var = &$query->query_vars[$tax_slug];  
			if ( isset($var) && $var>0) {  
				$term = get_term_by('id',$var,$tax_slug);  
				if($term)
					$var = $term->slug;  
			}  
		}  
	} 
	return $query;
}); 

然后将cpt_type_filter方法替换 (第469行到505行代码

// 修正自定义标签筛选-----------------------------------------------------------------
add_action('restrict_manage_posts', 'cpt_type_filter', 10);
function cpt_type_filter($post_type) {
    // 处理自定义文章类型 'sites' 和 'book'
    if ('sites' == $post_type) {
        $request_attr = 'sites_type'; 
        $meta_key = '_sites_type';
    } elseif ('book' == $post_type) {
        $request_attr = 'book_type'; 
        $meta_key = '_book_type';
    } else {
        return;
    }

    // 选择过滤器
    $selected = ''; 
    if (isset($_REQUEST[$request_attr])) {
        $selected = $_REQUEST[$request_attr];
    }

    // 获取筛选条件数据
    global $wpdb;
    $results = $wpdb->get_col( 
        $wpdb->prepare( "
            SELECT DISTINCT pm.meta_value 
            FROM {$wpdb->postmeta} pm
            LEFT JOIN {$wpdb->posts} p ON p.ID = pm.post_id
            WHERE pm.meta_key = '%s'
            AND p.post_status IN ('publish', 'draft')
            ORDER BY pm.meta_value", 
            $meta_key
        ) 
    );

    // 输出自定义字段筛选下拉菜单
    echo '<select id="my-loc" name="' . $request_attr . '">';
    echo '<option value="0">' . __('选择类型', 'io_setting') . ' </option>';
    foreach ($results as $location) {
        $select = ($location == $selected) ? ' selected="selected"' : '';
        echo '<option value="' . $location . '"' . $select . '>' . $location . ' </option>';
    }
    echo '</select>';

    // 处理自定义分类法 'sitetag' 的标签筛选
    if ('sites' == $post_type || 'book' == $post_type) {
        $tag_filter = 'sitetag'; // 自定义分类法筛选条件
        $tags = get_terms(array(
            'taxonomy' => 'sitetag', // 使用自定义标签分类 'sitetag'
            'orderby'  => 'name',
            'hide_empty' => false, // 包括没有文章的标签
        ));

        // 输出自定义分类法标签筛选下拉菜单
        if (!empty($tags) && !is_wp_error($tags)) {
            echo '<select name="tag_filter">';
            echo '<option value="0">' . __('选择标签', 'io_setting') . ' </option>';
            foreach ($tags as $tag) {
                $selected_tag = (isset($_GET['tag_filter']) && $_GET['tag_filter'] == $tag->term_id) ? ' selected="selected"' : '';
                echo '<option value="' . $tag->term_id . '" ' . $selected_tag . '>' . $tag->name . '</option>';
            }
            echo '</select>';
        }
    }
}

add_filter('parse_query', function ($query) {
    if (is_admin() && 'edit.php' == $GLOBALS['pagenow']) {
        // 检查自定义分类法 'sitetag' 筛选条件
        if (isset($_GET['tag_filter']) && $_GET['tag_filter'] != '0') {
            $tag_id = $_GET['tag_filter'];
            $query->query_vars['tax_query'] = array(
                array(
                    'taxonomy' => 'sitetag', // 自定义分类法 'sitetag'
                    'field'    => 'term_id',
                    'terms'    => $tag_id,
                    'operator' => 'IN',
                ),
            );
        }
    }
    return $query;
});

最终效果如下

OneNav 5.2版本的网址分类筛选BUG问题解决方案

如果还是不会,建议直接放弃治疗!

© 版权声明

相关文章

暂无评论

您必须登录才能参与评论!
立即登录
none
暂无评论...