【问题标题】:WordPress - List category according to first letterWordPress - 根据首字母列出类别
【发布时间】:2020-08-03 17:43:45
【问题描述】:

我在这个论坛上检查过类似的问题,但我找不到任何答案来告诉我我该如何做到这一点。

我设置了一个 WP 页面模板,它按字母顺序在 2 列中列出了所有类别(及其相关帖子)。显示类似于下图:

代码运行良好。

但是,我想更改代码,以便我可以传递一个字母(例如,'A'),以便只有以字母'A'(或选择的任何字母)开头的类别 - 和他们的帖子 - 显示出来。

例如,传递字母“A”将导致以下显示:

我使用的代码如下:

<?php

// Grab all the categories from the database that have posts.
$categories = get_terms( 'category', 'orderby=name&order=ASC');

// Loop through categories
echo "<div class='new-column'>";

$counter = 0;

foreach ( $categories as $category ) {
   if($counter % 4 == 0 && $counter !=0){
      echo "<div class='new-column'>";
   }

// Display category name
echo '<h2 class="post-title">' . $category->name . '</h2>';
echo '<div class="post-list">';

// WP_Query arguments
$args = array(
   'cat' => $category->term_id,
   'order' => 'ASC',
   'orderby' => 'title',
);

// The Query
$query = new WP_Query( $args );

// The Loop
if ( $query->have_posts() ) {
while ( $query->have_posts() ) {
$query->the_post();

$customfieldvalue = get_post_meta($post->ID, "PDF", true);
?>

<p><a href="<?php echo $customfieldvalue; ?>" target="_blank"><?php the_title(); ?></a></p>

<?php

} // End while
} // End if

echo '</div>';

// Restore original Post Data
wp_reset_postdata();
$counter++;
if($counter % 4 == 0){
  echo "</div>";
}
} // End foreach

if($counter % 4 != 0){
   echo "</div>";
}

?>

我的问题是,我如何编辑代码,以便将字母('A'、'B'、'C' 等)传递给代码并且只显示以该字母开头的类别?

更新

有人建议 Lafif Astahdziq's 解决方案,不久前在回答另一个问题时发布,也是对我的问题的适当回答。

乍一看可能是这样。但是,在阅读了 Lafif 的回答后,恐怕我无法理解他的代码是如何工作的,以及如何使用它来改进我的代码并解决我的问题。

如果一个特定的答案“完美”,但提出问题的人无法理解,这是否是一个令人满意的结果?

如果我接受 Lafif 的回答,那么我将不得不再问一个问题 - 我如何使用 Lafif 的代码?

最后,我并不想以任何方式嘲笑拉菲夫的回答。我确信它是出于对先前问题的最佳回应。

【问题讨论】:

  • 这能回答你的问题吗? Listing custom taxonomy terms by first letter using “name_like" does not work even after filtering query using “term_clauses” hook Lafif Astahdziq 的答案完美无缺,完全符合您的要求!
  • 不,这并不能真正回答我的问题。就 PHP 而言,我是初学者,Lafif Astahdziq 的回答虽然在技术上可能是完美的,但对我来说太抽象了。我不知道如何实现它或将它集成到我现有的代码中。
  • 您需要做的就是将该函数原样复制到您的functions.php 中。然后你可以在你的get_terms 参数中使用'__first_letter' =&gt; $initial_letter。如果你卡住了,请告诉我。它实际上是一个真正的网络解决方案,当你让它工作时你应该考虑支持它:)
  • FluffyKittten,感谢您鼓励我坚持 Lafif 的解决方案。在访问了几次 WordPress 代码参考之后,我设法让它工作了。同意,很整洁。
  • 很高兴你能成功!你遇到了什么问题?当我把它放在我的functions.php中时,它立即对我有用。我不需要改变任何东西。如果您让我们知道问题,我们可以添加到答案中以向其他用户澄清。我已经看到了很多关于这个问题的答案,而这个答案是迄今为止最简单、最干净、侵入性最小的解决方案——你需要对实际 SQL 做的事情越少越好:)

标签: php wordpress


【解决方案1】:

您可以对 Wordpress 数据库进行自定义查询,然后在 URL 中发送搜索字母。

查询将类似于(简化):

$letter = $_GET['firstLetter']; 
$sql = "SELECT * FROM wp_posts WHERE cat_name LIKE '" . $letter . "%' ";

您可以阅读有关分类法的数据库关系here

【讨论】:

  • 谢谢,贾卡。我在这里使用了您的建议将参数(字母)传递给我更新的脚本。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-02-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-25
  • 2019-12-28
相关资源
最近更新 更多