使用 WP_Query() 仅在 wordpress 中显示 10 个最近添加的帖子类别名称
Display 10 recently added posts category name only in wordpress using WP_Query()
现在我像这样显示类别列表:
<?php
$arg = array(
'orderby' => 'name',
'number' => 6,
);
$categories = get_categories($arg);
foreach ($categories as $cat) {
?>
<span class="firstMenuSpan" style="padding-right:34px;color:#000;">
<a href="?catId=<?php echo $cat->cat_ID; ?>"><?php echo $cat->name; ?></a>
</span>
<?php
}
?>
现在分类按字母顺序显示,但我需要显示最近添加的分类post。
任何想法或代码都会有所帮助。
否则是否可以通过内置 WP_Query 参数
对类别值进行排序
我需要澄清一下,我能否借助如下代码中的方法获取类别名称:
<?php
$args = array(
'numberposts' => 10,
'offset' => 0,
'category' => 0,
'orderby' => 'post_date',
'order' => 'DESC',
'include' => '',
'exclude' => '',
'meta_key' => '',
'meta_value' =>'',
'post_type' => 'post',
'post_status' => 'draft, publish, future, pending, private',
'suppress_filters' => true
);
$recent_posts = wp_get_recent_posts( $args, ARRAY_A );
?>
如果我通过上述方法获取类别,我是否可以限制值并显示为重复 post 类别值的值。
关于上述方法的任何帮助也很有用。
主要Quote/Aim/Requirement或结尾:
Need to display only a list of 10 category name of recently updated/added post as a menu.
有多种方法可以解决此问题并为您提供所需的列表。我将向您展示几种不同的方法来获取最近 10 post 秒的类别列表。
注意:请参阅下面的功能请求解释,因为我给您的代码是针对第二个的。
代码片段 1 - 使用 WordPress 内置插件
第一个代码解决方案执行以下操作:
- 获取 post 个 ID 的数组
- 如果返回一个数组,则它会从该列表中获取类别。
我已将功能分解为单独的有目的的功能以实现可重用性:
/**
* Get a list of the most recent Post IDs.
*
* @since 1.0.0
*
* @return array|false Returns an array of post
* IDs upon success
*/
function get_most_recent_post_ids() {
$args = array(
'posts_per_page' => 10,
'orderby' => 'post_date',
'post_status' => 'publish',
'fields' => 'ids',
);
$query = new WP_Query( $args );
if ( ! $query->have_posts() ) {
return false;
}
wp_reset_postdata();
return $query->posts;
}
/**
* Get the categories of the most recent posts.
*
* @since 1.0.0
*
* @return array|bool Returns an array of WP_Term objects upon success;
* else false is returned.
*/
function get_most_recent_posts_categories() {
$most_recent_post_ids = get_most_recent_post_ids();
if ( ! $most_recent_post_ids ) {
return false;
}
$categories = wp_get_object_terms( $most_recent_post_ids, 'category');
if ( ! $categories || is_wp_error( $categories ) ) {
return false;
}
return $categories;
}
代码片段 2 - 编写您自己的 SQL 查询
获取此列表的另一种方法是编写本机 SQL 查询并使用 $wpdb
。在此代码示例中,我们执行一次数据库命中以获取类别列表。对于每个类别,它 returns 术语 ID、名称和 slug 供您使用。
/**
* Get a list of categories for the most recent posts.
*
* @since 1.0.0
*
* @param int $number_of_posts Number of the most recent posts.
* Defaults to 10
*
* @return array|bool
*/
function get_most_recent_posts_categories( $number_of_posts = 10 ) {
global $wpdb;
$sql_query = $wpdb->prepare(
"SELECT t.term_id, t.name, t.slug
FROM {$wpdb->term_taxonomy} AS tt
INNER JOIN {$wpdb->terms} AS t ON (tt.term_id = t.term_id)
INNER JOIN {$wpdb->term_relationships} AS tr ON (tt.term_taxonomy_id = tr.term_taxonomy_id)
INNER JOIN {$wpdb->posts} AS p ON (tr.object_id = p.ID)
WHERE p.post_status = 'publish' AND tt.taxonomy = 'category'
GROUP BY t.term_id
ORDER BY t.term_id ASC, p.post_date DESC
LIMIT %d;",
$number_of_posts );
$categories = $wpdb->get_results( $sql_query );
if ( ! $categories || ! is_array( $categories ) ) {
return false;
}
return $categories;
}
使用上面的代码
您可以像这样使用上面的两个选项:
$categories = get_most_recent_posts_categories();
if ( ! $categories ) {
return;
}
foreach ( $categories as $category ) : ?>
<span class="firstMenuSpan" style="padding-right:34px;color:#000;">
<a href="?catId=<?php esc_attr_e( $category->term_id ); ?>"><?php esc_html_e( $category->name ); ?></a>
</span>
<?php endforeach;
以上代码获取类别列表。如果 none 被返回,那么你就退出了。否则,您可以遍历它们中的每一个并构建您的 HTML 列表。
关于代码的一些注意事项:
- 如果未返回任何类别,则代码退出。如果此代码段下方有其他代码 运行,则需要进行调整。
- 您想在将值呈现给浏览器之前正确转义这些值。请注意,代码使用
esc_attr_e
和 esc_html_e
。保持您的网页清洁、清洁和安全。
同样,有多种方法可以完成此功能请求。我给了你两个选择。您可以根据需要调整它们,然后 select 适合您需要的那个。
解释功能请求
功能请求有两种不同的含义:
Need to display only a list of 10 category name of recently updated/added post as a menu.
我们可以这样解释请求:
- 从字面上看,它说我想要10个类别名称句点。我想要最近的 posts.
- 或者...最近 10 post 秒(最近),获取类别名称列表。
解读一
此功能请求的意图有所不同。第一种解释说它需要 10 个类别,而不管最近 post 的数量。
让我们考虑一下。如果最后 10 post 中只有 5 个类别,那么您必须扩大 post 搜索,直到收集到所有 10 个类别。
这与第二种解释的要求不同,需要不同的代码。
解释2(我用的那个)
这个说最后 10 post 秒,获取他们的类别。此功能请求更有意义,因为该列表与最新内容相关联。
确保您了解他们想要的版本。
现在我像这样显示类别列表:
<?php
$arg = array(
'orderby' => 'name',
'number' => 6,
);
$categories = get_categories($arg);
foreach ($categories as $cat) {
?>
<span class="firstMenuSpan" style="padding-right:34px;color:#000;">
<a href="?catId=<?php echo $cat->cat_ID; ?>"><?php echo $cat->name; ?></a>
</span>
<?php
}
?>
现在分类按字母顺序显示,但我需要显示最近添加的分类post。
任何想法或代码都会有所帮助。
否则是否可以通过内置 WP_Query 参数
对类别值进行排序我需要澄清一下,我能否借助如下代码中的方法获取类别名称:
<?php
$args = array(
'numberposts' => 10,
'offset' => 0,
'category' => 0,
'orderby' => 'post_date',
'order' => 'DESC',
'include' => '',
'exclude' => '',
'meta_key' => '',
'meta_value' =>'',
'post_type' => 'post',
'post_status' => 'draft, publish, future, pending, private',
'suppress_filters' => true
);
$recent_posts = wp_get_recent_posts( $args, ARRAY_A );
?>
如果我通过上述方法获取类别,我是否可以限制值并显示为重复 post 类别值的值。
关于上述方法的任何帮助也很有用。
主要Quote/Aim/Requirement或结尾:
Need to display only a list of 10 category name of recently updated/added post as a menu.
有多种方法可以解决此问题并为您提供所需的列表。我将向您展示几种不同的方法来获取最近 10 post 秒的类别列表。
注意:请参阅下面的功能请求解释,因为我给您的代码是针对第二个的。
代码片段 1 - 使用 WordPress 内置插件
第一个代码解决方案执行以下操作:
- 获取 post 个 ID 的数组
- 如果返回一个数组,则它会从该列表中获取类别。
我已将功能分解为单独的有目的的功能以实现可重用性:
/**
* Get a list of the most recent Post IDs.
*
* @since 1.0.0
*
* @return array|false Returns an array of post
* IDs upon success
*/
function get_most_recent_post_ids() {
$args = array(
'posts_per_page' => 10,
'orderby' => 'post_date',
'post_status' => 'publish',
'fields' => 'ids',
);
$query = new WP_Query( $args );
if ( ! $query->have_posts() ) {
return false;
}
wp_reset_postdata();
return $query->posts;
}
/**
* Get the categories of the most recent posts.
*
* @since 1.0.0
*
* @return array|bool Returns an array of WP_Term objects upon success;
* else false is returned.
*/
function get_most_recent_posts_categories() {
$most_recent_post_ids = get_most_recent_post_ids();
if ( ! $most_recent_post_ids ) {
return false;
}
$categories = wp_get_object_terms( $most_recent_post_ids, 'category');
if ( ! $categories || is_wp_error( $categories ) ) {
return false;
}
return $categories;
}
代码片段 2 - 编写您自己的 SQL 查询
获取此列表的另一种方法是编写本机 SQL 查询并使用 $wpdb
。在此代码示例中,我们执行一次数据库命中以获取类别列表。对于每个类别,它 returns 术语 ID、名称和 slug 供您使用。
/**
* Get a list of categories for the most recent posts.
*
* @since 1.0.0
*
* @param int $number_of_posts Number of the most recent posts.
* Defaults to 10
*
* @return array|bool
*/
function get_most_recent_posts_categories( $number_of_posts = 10 ) {
global $wpdb;
$sql_query = $wpdb->prepare(
"SELECT t.term_id, t.name, t.slug
FROM {$wpdb->term_taxonomy} AS tt
INNER JOIN {$wpdb->terms} AS t ON (tt.term_id = t.term_id)
INNER JOIN {$wpdb->term_relationships} AS tr ON (tt.term_taxonomy_id = tr.term_taxonomy_id)
INNER JOIN {$wpdb->posts} AS p ON (tr.object_id = p.ID)
WHERE p.post_status = 'publish' AND tt.taxonomy = 'category'
GROUP BY t.term_id
ORDER BY t.term_id ASC, p.post_date DESC
LIMIT %d;",
$number_of_posts );
$categories = $wpdb->get_results( $sql_query );
if ( ! $categories || ! is_array( $categories ) ) {
return false;
}
return $categories;
}
使用上面的代码
您可以像这样使用上面的两个选项:
$categories = get_most_recent_posts_categories();
if ( ! $categories ) {
return;
}
foreach ( $categories as $category ) : ?>
<span class="firstMenuSpan" style="padding-right:34px;color:#000;">
<a href="?catId=<?php esc_attr_e( $category->term_id ); ?>"><?php esc_html_e( $category->name ); ?></a>
</span>
<?php endforeach;
以上代码获取类别列表。如果 none 被返回,那么你就退出了。否则,您可以遍历它们中的每一个并构建您的 HTML 列表。
关于代码的一些注意事项:
- 如果未返回任何类别,则代码退出。如果此代码段下方有其他代码 运行,则需要进行调整。
- 您想在将值呈现给浏览器之前正确转义这些值。请注意,代码使用
esc_attr_e
和esc_html_e
。保持您的网页清洁、清洁和安全。
同样,有多种方法可以完成此功能请求。我给了你两个选择。您可以根据需要调整它们,然后 select 适合您需要的那个。
解释功能请求
功能请求有两种不同的含义:
Need to display only a list of 10 category name of recently updated/added post as a menu.
我们可以这样解释请求:
- 从字面上看,它说我想要10个类别名称句点。我想要最近的 posts.
- 或者...最近 10 post 秒(最近),获取类别名称列表。
解读一
此功能请求的意图有所不同。第一种解释说它需要 10 个类别,而不管最近 post 的数量。
让我们考虑一下。如果最后 10 post 中只有 5 个类别,那么您必须扩大 post 搜索,直到收集到所有 10 个类别。
这与第二种解释的要求不同,需要不同的代码。
解释2(我用的那个)
这个说最后 10 post 秒,获取他们的类别。此功能请求更有意义,因为该列表与最新内容相关联。
确保您了解他们想要的版本。