【问题标题】:WordPress dynamic change of posts categoryWordPress动态更改帖子类别
【发布时间】:2017-10-02 13:44:10
【问题描述】:

大家好! 我想知道有没有办法为所有类别创建一个页面并根据单击的导航菜单项在 WP_query 中动态更改类别名称,或者我必须为每个类别创建一个单独的页面(在我的情况下有 23 个) ?

菜单:

<?php   
          $args = array(
            'menu' => 'category_nav',
            'container' => 'ul',
            'container_class' => 'accordion-content',
            'container_id' => '',
            'menu_class' => 'accordion-content',
            'menu_id' => '',
            'echo' => true,
            'fallback_cb' => false,
            'before' => '',
            'after' => '',
            'link_before' => '',
            'link_after' => '',
            'items_wrap' => '<ul id="%1$s" class="%2$s">%3$s</ul>',
            'item_spacing' => 'preserve',
            'depth' => 0,
            'walker' => '',
            'theme_location' => ''
          );

          wp_nav_menu($args); ?>

帖子:

<?php
    $args = array(
        'nopaging' => true,
        'orderby' => 'name',
        'category_name' => 'HERE GOES A CATEGORY NAME',
    );

    $q = new WP_Query($args);
    if($q->have_posts()) {
        while($q->have_posts()){ $q->next_post();
            $post_id = $q->post->ID;
            $thumbnail = wp_get_attachment_image_src( get_post_thumbnail_id ( $post_id ), 'full' );
            $title = get_the_title($post_id);
            $date = get_the_date('d.m.Y', $post_id);
            $content = get_post_field('post_content', $post_id);
            $discount = get_post_field('discount', $post_id);
            $discount_exists = get_post_meta( $post_id, 'discount', true );
            $full_description = get_post_field('full_description', $post_id);
            $full_description_exists = get_post_meta( $post_id, 'full_description', true ); ?>
      <div class="gallery-item">
          <?php echo '<div class="item-img" style="background-image:url(\'' . $thumbnail[0] . '\')"></div>'; ?>
          <div class="item-content">
            <div class="item-header"> <?php echo $title; ?> </div>
            <div class="item-desc"> <?php echo $content; ?> </div>
          </div>
          <?php 
              if ( $full_description_exists ) {
                ?><div class="btn">More</div><?php
              } ?>
        </div>
    <?php
        }
    }

    wp_reset_postdata();
    ?>

我应该从哪里获得该类别名称/ID/slug,如何在我的代码中使用它?我应该在模板文件夹中只创建 category.php 文件还是应该使用其他文件结构来自定义类别输出?

【问题讨论】:

    标签: php wordpress navigation


    【解决方案1】:

    您不需要为类别创建每个页面,您可以创建可用于动态显示内容的基本文件。正如您在 wordpress here 的模板层次结构中看到的那样,类别是默认类别,默认类别附加默认 post 类型。

    wordpress 的默认类别Post 类型。

    在 WordPress 中渲染分类归档索引页面使用以下路径:

    1. category-{slug}.php – 如果类别的 slug 是新闻,WordPress 将 查找 category-news.php。
    2. category-{id}.php – 如果类别的 ID 为 6,WordPress 将查找 对于 category-6.php。
    3. category.php
    4. archive.php
    5. index.php

    具有自定义帖子类型的自定义分类法

    自定义分类法使用稍微不同的模板文件路径:

    1. taxonomy-{taxonomy}-{term}.php – 如果分类是 sometax,并且 taxonomy 的 term 是 someterm,WordPress 会寻找 分类法-sometax-someterm.php。在帖子格式的情况下, 分类是“post_format”,术语是“post-format-{format}”。 即链接帖子的taxonomy-post_format-post-format-link.php 格式。
    2. taxonomy-{taxonomy}.php – 如果分类是 sometax,WordPress 会寻找taxonomy-sometax.php。
    3. taxonomy.php
    4. archive.php
    5. index.php

    在您的情况下,您可以使用 category.php 进行动态类别显示,除非您的类别不是自定义分类法,否则您需要使用 taxonomy.php 作为基本模板。

    • Q) 我应该从哪里获得该类别名称/ID/slug 以及如何使用它 我的代码?

    可以使用get_query_var();函数来实现

    get_query_var('cat'); > 这将返回当前类别 ID。

    $category = get_category(get_query_var('cat')); 
    

    然后您可以通过类别 id 获取类别对象,这样您就可以获取 cat id, name, slug etc

    【讨论】:

    • 这个答案是杰作!非常感谢!
    【解决方案2】:

    single.php 适用于所有类别。每个帖子都可以使用这个模板(除非你创建像 single-$template.php 这样的模板),并且在代码中你可以使用这个https://developer.wordpress.org/reference/functions/get_the_category/从这个帖子中获取类别

    【讨论】:

    • single.php 用于单个postattachments,查找模板层次结构here
    • 我同意,但该解决方案取决于 OP 到底想要做什么。
    猜你喜欢
    • 2014-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-31
    • 1970-01-01
    • 1970-01-01
    • 2014-03-04
    相关资源
    最近更新 更多