首页 > 解决方案 > 如何遍历自定义分类类别

问题描述

我试图弄清楚如何将我的自定义分类类别添加到模板页面并让它们链接到该类别的所有自定义帖子类型。

这是我到目前为止所拥有的。我创建了一个插件来保存创建自定义帖子类型(承包商)和自定义帖子分类类别(承包商类别)的功能。就我有一个列出所有承包商的模板页面(page-contractors-full-width.php)而言,这是有效的。在页面顶部,我有一个列出所有自定义类别(contractor_category)的循环。问题是链接将转到 404 页面。我无法弄清楚每个自定义类别的 slug 应该是什么。我试过 /contractor/contractor_category 和 /contractor_category

我尝试创建archive-contractor.php 和archive-contractor_category.php 和taxonomy-contractor_category.php 只是为了看看这些是否可行,但它们不起作用。我已经阅读了有关此的 wordpress 文档,但这有点超出我的想象。我最好看例子大声笑..

这是我的插件代码,用于创建自定义帖子类型和自定义分类

add_action( 'init', 'create_contractor_category_tax' );

function create_contractor_category_tax() {
    register_taxonomy(
        'contractor_category',
        'contractor',
        array(
            'label' => __( 'Contractor Category' ),
            'rewrite' => array( 'slug' => 'contractor_category' ),
            'hierarchical' => true,
        )
    );
}

function nari_post_type_contractor() {

    $supports = array(
    'title', // post title
    'editor', // post content
    'author', // post author
    'thumbnail', // featured images
    'excerpt', // post excerpt
    'custom-fields', // custom fields
    'comments', // post comments
    'revisions', // post revisions
    'post-formats', // post formats
    );

    $labels = array(
        'name' => _x('Contractors', 'plural'),
        'singular_name' => _x('Contractor', 'singular'),
        'menu_name' => _x('Contractors', 'admin menu'),
        'name_admin_bar' => _x('Contractors', 'admin bar'),
        'add_new' => _x('Add New', 'add new'),
        'add_new_item' => __('Add New Contractor'),
        'new_item' => __('New Contractor'),
        'edit_item' => __('Edit Contractor'),
        'view_item' => __('View Contractor'),
        'all_items' => __('All Contractors'),
        'search_items' => __('Search Contractors'),
        'not_found' => __('No Contractors found.'),
    );

    $args = array(
        'supports' => $supports,
        'labels' => $labels,
        'public' => true,
        'query_var' => true,
        'rewrite' => array('slug' => 'contractor'),
        'has_archive' => true,
        'hierarchical' => false,
    );
    register_post_type('contractor', $args);
}
add_action('init', 'nari_post_type_contractor');

这是我循环并获取自定义分类链接的代码

// Get the taxonomy's terms
$terms = get_terms(
    array(
        'taxonomy'   => 'contractor_category',
        'hide_empty' => true,
    )
);

// Check if any term exists
if ( ! empty( $terms ) && is_array( $terms ) ) {
    // add links for each category
    foreach ( $terms as $term ) { ?>
        <a class="btn  btn-default" href="<?php echo esc_url( get_term_link( $term ) ) ?>">
            <?php echo $term->name; ?>
        </a><?php
    }
}

任何帮助将不胜感激 :)

标签: phpwordpresscustom-taxonomy

解决方案


我试图理解这个问题,并且从一个疯狂的猜测中我会说你以某种方式搞砸了你的路径。调用<?php echo esc_url( get_term_link( $term ) ) ?>url 应该可以工作,所以我猜你已经在管理控制台中触摸了 url 路径。

您必须了解自定义分类法和自定义帖子类型之间的区别。

此路径将转到存档页面:(/contractor或者archive-contractor.php如果它不存在archive.php

此路径将转到分类页面:(/contractor/contractor_category或者taxonomy-contractor_category.php如果它不存在taxonomy.php)。

如果您没有存档文件或具有有效循环的分类文件,如果页面存在,您将收到 404 错误,如果不存在,您将被重定向到主页。

你的代码很好。从你给我的唯一解决方法来看,我目前看到的问题是创建一个具有最低要求的空白石板主题(function.php 文件中没有插件的所有内容),然后从头开始删除你的所有 exes 代码只需获得一个有效的演示。试着得到一个清晰的画面,你会发现你的问题。


推荐阅读