Добавление классов в категории в списке архивов в Wordpress - PullRequest
0 голосов
/ 17 марта 2020

Я не очень знаком с PHP, но я учусь. Я использую Wordpress и хочу создать фильтруемую страницу «обновлений новостей», представляющую собой список архивов сообщений из «последних 15 сообщений».

У меня есть 4 категории:

  • Новое пособие
  • Полезно
  • Срочно и важно
  • Для вас

Когда я создаю сообщение, назначенное этой конкретной категории, я хочу элемент списка, которому будет присвоен класс категории.

В результате я хочу, чтобы моя страница была

Со следующим CSS:

.category-useful:before {
        float: right;
    position: inherit;
    color: white;
    font-family: "Font Awesome 5 Pro";
    font-weight: 900;
    content: "\f129";
    zoom: 3;
    padding: 5px 10px 5px 20px;
}

.category-urgent_important, .category-urgent_important h2 {
    color: white;
    background-color: red;
}

.category-urgent_important:before {
        float: right;
    position: inherit;
    color: white;
    font-family: "Font Awesome 5 Pro";
    font-weight: 900;
    content: "\f071";
    zoom: 3;
    padding: 5px 5px 5px 20px;
}

.category-for_you, .category-for_you h2 {
    color: white;
    background-color: green;
}

.category-for_you:before {
    float: right;
    position: inherit;
    color: white;
    font-family: "Font Awesome 5 Pro";
    font-weight: 900;
    content: "\f02d";
    zoom: 3;
    padding: 5px 5px 5px 20px;
}

.category-uncategorised {
display: none;
}

Вот моя текущая разметка:

  function category_ac(){
    $categories = get_the_category();
    foreach ( $categories as $category ) {
        echo esc_html( $category->cat_name );
    }
  }

  $how_many_last_posts = intval(get_post_meta($post->ID, 'archived-posts-no', true));
  if($how_many_last_posts > 200 || $how_many_last_posts < 2) $how_many_last_posts = 15;

  $my_query = new WP_Query('post_type=post&nopaging=1');
  if($my_query->have_posts()) {
    echo '<h1 class="widget-title">Last '.$how_many_last_posts.' Posts <i class="fa fa-bullhorn" style="vertical-align: baseline;"></i></h1>&nbsp;';
    echo '<div class="archives-latest-section"><ol>';
    $counter = 1;
    while($my_query->have_posts() && $counter <= $how_many_last_posts) {
      $my_query->the_post();
      ?>
      <li class="<?php echo 'category-'.category_ac() ?>"><a href="<?php the_permalink() ?>" rel="category tag" title="Permanent Link to <?php the_title_attribute(); ?>"><?php the_title();?></a></li>
      <?php
      $counter++;
    }
    echo '</ol></div>';
    wp_reset_postdata();
  }

Беда в том, что она работает, но вот так:

<div class="archives-latest-section"><ol>      <li class="Uncategorized"><a href="https://www.website.com/2019/10/07/test-5/" rel="category tag" title="Permanent Link to Test 5">Test 5</a></li>
            <li class="New Benefitcategory-"><a href="https://www.website.com/2019/10/07/test-4/" rel="category tag" title="Permanent Link to Test 4">Test 4</a></li>
            <li class="Usefulcategory-"><a href="https://www.website.com/2019/10/07/test-3/" rel="category tag" title="Permanent Link to Test 3">Test 3</a></li>
            <li class="Urgent &amp; Importantcategory-"><a href="https://www.website.com/2019/10/07/test-2/" rel="category tag" title="Permanent Link to Test 2">Test 2</a></li>
            <li class="For Youcategory-"><a href="https://www.website.com/2019/10/07/test-1/" rel="category tag" title="Permanent Link to Test 1">Test 1</a></li>
      </ol></div>

Как можно Я манипулирую выводом 'category_a c ();' и убрать все пробелы и заглавные буквы, когда вы вставляете «category-» впереди?

Я нашел эту тему:

Strip php переменная, замените пробелы на тире

Хотя это подразумевает, что 'category_a c ()' должна быть переменной, которую нужно изменить.

Я не могу применить свою собственную переменную, такую ​​как:

$test = category_ac();

... Поскольку это ничего не делало, поэтому я предполагаю, что я делаю это неправильно.

1 Ответ

0 голосов
/ 17 марта 2020

Если вы оставите category- из php скобок и просто подтвердите, функция будет работать. Тогда вы можете попытаться использовать слаг категории вместо имени, возможно, это решит проблему с именем

Вот код с моими изменениями $category->slug и <li class="category-<?php echo category_ac() ?>">

Дайте мне знать, если это работает для вас

  function category_ac(){
    $categories = get_the_category();
    foreach ( $categories as $category ) {
        echo esc_html( $category->slug );
    }
  }

  $how_many_last_posts = intval(get_post_meta($post->ID, 'archived-posts-no', true));
  if($how_many_last_posts > 200 || $how_many_last_posts < 2) $how_many_last_posts = 15;

  $my_query = new WP_Query('post_type=post&nopaging=1');
  if($my_query->have_posts()) {
    echo '<h1 class="widget-title">Last '.$how_many_last_posts.' Posts <i class="fa fa-bullhorn" style="vertical-align: baseline;"></i></h1>&nbsp;';
    echo '<div class="archives-latest-section"><ol>';
    $counter = 1;
    while($my_query->have_posts() && $counter <= $how_many_last_posts) {
      $my_query->the_post();
      ?>
      <li class="category-<?php echo category_ac() ?>"><a href="<?php the_permalink() ?>" rel="category tag" title="Permanent Link to <?php the_title_attribute(); ?>"><?php the_title();?></a></li>
      <?php
      $counter++;
    }
    echo '</ol></div>';
    wp_reset_postdata();
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...