我有一种感觉,我走在了正确的轨道上,我只是没有足够扎实的PHP知识,无法比我目前所处的位置走得更远。
我当前使用以下代码从单个类别返回子类别列表:
<?php
$taxonomyName = "category";
$terms = get_terms($taxonomyName,array(\'parent\' => 79));
echo \'<ul>\';
foreach($terms as $term) {
echo \'<li>\';
echo \'<a href="\'.get_term_link($term->slug,$taxonomyName).\'">\'.$term->name.\'</a><br/>\';
$thumbnails = get_posts(\'numberposts=1&orderby=rand\');
foreach ($thumbnails as $thumbnail) {
echo \'<a href="\' . get_permalink( $thumbnail->ID ) . \'" title="\' . esc_attr( $thumbnail->post_title ) . \'">\';
if ( has_post_thumbnail($thumbnail->ID)) {
echo get_the_post_thumbnail($thumbnail->ID, \'thumbnail\');
} else {
echo \'no thumbnail\';
}
echo \'</a>\';
}
echo \'<li>\';
}
echo \'</ul>\';
?>
此代码在某种程度上起作用。它返回父项ID 79下所有六个子类别的列表。但是,我还想在6个子类别的每个列表项中返回一个随机缩略图。
不幸的是,这段代码从我所有的帖子中返回一个随机缩略图,而不仅仅是ID 79和它的特定子级。我需要它从父目录中返回的同一类别中返回一个缩略图<li>
.
有什么简单的方法可以做到这一点吗?我想我需要对该数组进行排序,并在嵌套的foreach循环中返回类别。我只是不知道怎么做。
提前感谢您的帮助!
SO网友:Jeremy Miller
所以为了做到这一点,我需要首先对每个循环执行一个,将类别slug存储为一个变量,JAMterm
, 然后在查询中使用它从类别中随机抽取一个缩略图。
幸亏@Renishkhunt 感谢你一直以来帮助我得到这个答案。
<?php
$taxonomyName = "category";
$terms = get_terms($taxonomyName,array(\'parent\' => 79));
echo \'<ul>\';
foreach($terms as $term) {
echo \'<li><a href="\'.get_term_link($term->slug,$taxonomyName).\'">\'.$term->name.\'</a><br/>\';
$JAMterm = $term->slug;
global $wp_query;
$term = $wp_query->queried_object;
$args=array(
\'orderby\' => \'rand\',
\'posts_per_page\' => 1,
\'post_type\' => \'post\',
\'tax_query\' => array(
array(
\'taxonomy\' => \'category\',
\'field\' => \'slug\',
\'terms\' => $JAMterm
)
)
);
$new_query = null;
$new_query = new WP_Query($args);
while ($new_query->have_posts()) : $new_query->the_post();
the_post_thumbnail();
endwhile;
wp_reset_postdata();
echo \'</li>\';
}
echo \'</ul>\';
?>
SO网友:Luca Reghellin
由于您只需要随机缩略图,而不是所有POST数据,因此可以使用这样的直接查询(#请设置实际表名或使用$wpdb->prefix
):
SELECT
m.meta_value
FROM
wp_posts p
INNER JOIN wp_postmeta m ON m.post_id = p.ID
INNER JOIN wp_term_relationships rel ON p.ID = rel.object_id
INNER JOIN wp_term_taxonomy tt ON tt.term_taxonomy_id = rel.term_taxonomy_id
INNER JOIN wp_terms t ON tt.term_id = t.term_id
WHERE
p.post_type = \'your post type\' # please set as needed
AND p.post_status = \'publish\'
AND m.meta_key = \'_thumbnail_id\'
AND t.slug in (\'your slug list\') # please set as needed
#AND t.term_id in (\'yout id list\') # alternative: a list of term ids
ORDER BY RAND()
LIMIT 1
您将从属于特定分类法或类别的特定术语的已发布帖子列表中获得1个帖子缩略图ID。然后使用
wp_get_attachment_image_url()
或WP提供的其他一些附件相关功能。
一般来说,当没有本地wordpress函数来检索数据时,我认为最好花些时间构建一个自定义查询,因为它通常更快,然后可以将其嵌入到一些实用函数中,以便在需要时再次使用。