我可以将wordpress中的类别标签与页面标题进行比较吗?

时间:2018-09-04 17:21:52

标签: php wordpress

我的博客文章结构化,具有类别,这些类别的标签与某些自定义帖子标题相同。

我想使用这些匹配的子标签来运行从帖子到自定义帖子页面的链接。

在single.php中,我正在尝试运行此代码...但是,不是返回自定义帖子的信息,而是返回当前帖子的信息

<?php
    $categories = get_the_category();
        if ( ! empty( $categories ) ) {
            foreach( $categories as $category ) {
                $current_slug = $category->slug;
                    $args = array(
                        'post_type' => 'community',
                        'name' => $current_slug
                    );
                    $cat_query = new WP_Query($args);
                    if ( $cat_query->have_posts() ) {
                         the_title( sprintf( '<h3 class="post-title"><a href="%s" rel="bookmark">', esc_url( get_permalink() ) ), '</a></h3>');
                    wp_reset_postdata();
                    }
            }
        }

?>

我对这段代码的希望是->如果某条帖子的类别为“ cat-one”,则该帖子的顶部将是指向CAT ONE页面的链接(这是自定义帖子类型)网址为.... / communities / cat-one的页面。

1 个答案:

答案 0 :(得分:0)

这绝对有可能。但是,您的代码有一些问题,我还清理了其他一些东西。

您已经设置了循环浏览类别的代码,但是您在name参数中使用了WP_Query(),并且没有为结果设置循环。根据{{​​3}}文档,name将返回一个帖子-如果您想要多个,(自WP 4.4起),您可以改用post_name__in。另外,代码的最大问题是,您永远不会在$cat_query内设置内部变量。我还添加了一个while循环,因此它将吐出多个类别链接。

如果不使用WP_Query()方法定义内部变量(或将$post_id参数传递给它们),则$query->the_post()the_title()之类的post变量函数将使用当前发布,这就是您现在看到的内容。

这应该使您入门:

if( $categories = get_the_category() ){
    foreach( $categories as $category ){
        $args = array(
            'post_type'     => 'community',
            'post_name__in' => $category->slug
        );
        $cat_query = new WP_Query( $args );

        if( $cat_query->have_posts() ){
            while( $cat_query->have_posts() ){
                $cat_query->the_post();

                the_title( sprintf( '<h3 class="post-title"><a href="%s" rel="bookmark">', esc_url( get_permalink() ) ), '</a></h3>');
            }

            wp_reset_postdata();
        }
    }
}