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

问题描述 投票:0回答:1

我有一个结构化的博客帖子有类别,这些类别的slug与一些自定义帖子后标题相同。

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

在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();
                    }
            }
        }

?>

我对这段代码的希望是 - >如果帖子被赋予了一个带有slug的类别:'cat-one'然后在帖子的顶部将是CAT ONE页面的链接(这是一个自定义的帖子类型页面,带有url .... / communities / cat-one。

php wordpress
1个回答
0
投票

这绝对应该是可能的。但是,您的代码存在一些问题,我已经清理了其他一些问题。

你已经设置了代码来循环遍历类别,但你在name args中使用WP_Query(),并且没有为结果设置循环。根据WP_Query()文档,name将返回一个帖子 - 如果你想要不止一个,(自WP 4.4起)你可以使用post_name__in代替。此外,也就是代码中较大的问题是,你永远不会在$cat_query中设置内部变量。我还添加了一个while循环,因此它将吐出多个类别链接。

如果没有使用$query->the_post()方法定义内部变量(或者将$post_id参数传递给它们),像the_title()get_permalink()这样的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();
        }
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.