【问题标题】:Get current Category Name on a page which filters posts by Category and custom meta_key在按类别和自定义元键过滤帖子的页面上获取当前类别名称
【发布时间】:2018-01-30 15:36:13
【问题描述】:

我使用自定义插件(和 meta_key)成功地按喜欢(计数)过滤了我所有的 WordPress 帖子(在自定义页面模板中),这也让我可以使用以下内容过滤特定类别中最喜欢的帖子

if (isset($_GET['category'])) {
    $args = array(
    'meta_key' => '_recoed',
    'meta_compare' => '>',
    'meta_value' => '0',
    'orderby' => 'meta_value_num',
    'order' => 'DESC',
    'category_name' => sanitize_text_field($_GET['category']),
    'paged' => $paged
    );
} 

query_posts($args);

get_template_part('index');

为每个类别过滤帖子的类别列表(工作正常)

<?php $categories = get_categories('exclude=' . implode(',', my_blog_cats()) . ', 1'); ?>

<?php if ($categories) { ?>

<?php $categories = get_categories(); ?>

<?php foreach($categories as $category) { ?>
    <li>
        <a class="popular-categories" href="<?php echo get_permalink(); ?>?category=<?php echo $category->category_nicename; ?>"><?php echo $category->name; ?></a> 
    </li>
<?php endforeach; ?>

<?php } ?>

例如过滤帖子后的url - 看起来像

.../hot-posts/?category=new-posts-category

知道如何在当前页面上仅回显当前类别名称吗?在示例的情况下,它将是“新帖子类别”

【问题讨论】:

  • 到目前为止我知道 - 是的
  • 您需要在此页面显示$_GET['category']术语ID的类别名称吗?
  • &lt;?php echo sanitize_title($_GET['category']); ?&gt; 我得到了正确的类别名称 - 但带有像“new-post-category”这样的破折号。希望这会有所帮助
  • 是的 - 但我不知道如何获得名称
  • 好吧,既然你不确定(我也不确定),我的回答中是否有所有可能性……

标签: php jquery wordpress categories taxonomy


【解决方案1】:

有 3 种可能性(WP 类别的分类是category

1) 一个 ID - 如果 $_GET['category'] 是 WP category term ID,您将使用:

if( isset($_GET['category'] ) && term_exists( intval($_GET['category']), 'category' ) ){
    $term = get_term( intval($_GET['category']), 'category' );
    echo '<p>' . $term->name . '</p>';
}

2) A SLUG - 如果 $_GET['category'] 是 WP category term SLUG,您将使用:

if( isset($_GET['category'] ) && term_exists( sanitize_text_field($_GET['category']), 'category' ) ){
    $term = get_term_by( 'slug', sanitize_text_field($_GET['category']), 'category' );
    echo '<p>' . $term->name . '</p>';
}

3) A NAME - 如果它已经是 WP category terme NAME,只需使用:

if( isset($_GET['category'] ) && term_exists( sanitize_text_field($_GET['category']), 'category' ) )
    echo '<p>' . sanitize_text_field($_GET['category']) . '</p>';

但不要在 WP category terme NAME 上使用 sanitize_title(),因为它会变成 term SLUG

【讨论】:

  • 第二个工作正常。另一个关于您之前在stackoverflow.com/a/48280321/9036446 的答案的快速问题。产品查询有时会在两次转到下一页后显示一些产品,有时会在重新加载后显示不同的产品(f5 或单击类别) - 我从未见过像这样奇怪的东西。它总是在重新加载 3 到 5 个页面后发生 - 知道吗?非常感谢。
  • @evavienna 我暂时不知道,因为我刚刚让你的初始代码按照你的要求工作......这很复杂,因为你正在做很多不同的自定义,还有其他东西可以与之互动……
猜你喜欢
  • 2023-04-05
  • 2019-11-24
  • 1970-01-01
  • 2015-05-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多