显示帖子类型类别的特色图片

时间:2020-07-15 作者:NinjaValerie

我继承了一个拥有大量定制PHP文件的网站。然而,我删除了很多,这是少数看起来仍然相关的内容之一。下面的代码在网站页脚中随机显示一幅来自特定帖子类型(图库)的图像。

在我之前,网站上只有一个帖子类型类别。现在我添加了更多的库类别,但页脚显示了所有类别的图像。如何修改此选项以显示图库帖子类型中的特定类别?

<?php query_posts(\'orderby=rand&showposts=1&post_type=gallery\'); 
                        while ( have_posts() ) : the_post();?>
                                <script>
                    jQuery(document).ready(function(){
                        $voice = \'<?php $image = wp_get_attachment_image_src( get_post_thumbnail_id($post->ID), "medium" ); echo $image[0]; ?>\';
                        jQuery(\'.footer-voice\').attr(\'src\', $voice);
                    });
                </script>
                            
                        <?php endwhile; ?>

2 个回复
SO网友:mozboz

您的问题的直接答案是,您只需将类别ID添加到query_posts() 电话,例如:

query_posts(\'orderby=rand&showposts=1&post_type=gallery&cat=10\');
稍长一点的回答是,使用它不是一个好主意query_posts 在主题和插件中。此处文档中的更多信息:https://developer.wordpress.org/reference/functions/query_posts/

您可能希望借此机会更改要使用的代码get_postsWP_Query, 您只需要将参数放在数组中,而不是放在查询字符串中。

SO网友:Antti Koskinen

我假设有一个为您的自定义帖子类型注册的自定义分类法。在这种情况下,您需要使用tax_query 的参数WP_Query 使用特定术语slug从自定义分类中获取帖子。

下面是一个示例代码,用于获取带有自定义术语的自定义post类型post。首先有一个helper函数,您可以将它放在functions.php 文件下面的几行演示了如何使用该函数。您需要更新分类名称,使其与实际名称相匹配,以使查询正常工作。

这个category_name 参数与分类法相关,分类法与Post类型相关。如果库帖子类型也使用默认类别作为其分类,则使用category 作为taxonomy 在下面

// in functions.php
function get_random_gallery_post_by_term( string $term ) {
    // Setup args
    $args = array(
        \'post_type\'      => \'gallery\',
        \'post_status\'    => \'publish\',
        \'posts_per_page\' => 1,
        \'orderby\'        => \'rand\',
        \'tax_query\'      => array(
            // Query post by custom taxonomy term
            array(
                // update your_gallery_taxonomy_name to match your actual taxonomy name
                // You can find taxonomy name on your browser address line when you\'re on the taxonomy admin page
                \'taxonomy\'     => \'your_gallery_taxonomy_name\', 
                \'field\'        => \'slug\',
                \'terms\'        => $term
            )
        ),
    );
    // Execute query
    $query = new WP_Query( $args );
    // Return found post or false, if not found
    return $query->posts ? $query->posts[0] : false;
}

// in some template file
$gallery_post = get_random_gallery_post_by_term( \'my-gallery-category\' );
// Do something with the post
if ( $gallery_post ) {
    // Thumbnail, empty string if thumbnail not found
    echo get_the_post_thumbnail( $gallery_post->ID, \'thumbnail\' );
    // Content
    echo wp_kses_post( $gallery_post->post_content );
}