Using page slug in wp_query

时间:2015-04-06 作者:Devon Hicks

我目前正在为一家我们的客户律师事务所建立一个网站。我们有两种自定义的帖子类型,律师和案例,我们需要在整个网站的各个区域将它们链接在一起。例如,当访问一个案件页面时,侧栏应该反映处理该案件的律师,每个律师页面应该显示他们处理过的案件。

我目前已经对其进行了设置,以便每次创建新案例时,都会在自定义分类法“案例日志”中创建一个条目。通过这种方式,只需进入配置文件后端并单击相关配置文件,即可为案件指派律师。我的目标的后半部分已经实现了这一点(在他们的个人资料中列出了工作过的案例),但还没有能够实现侧边栏列表。这是我正在尝试运行的查询。。。

<?php 

    // $valuec    = get_query_var($wp_query->query_vars[\'case-log\']);
    // echo get_term_by(\'slug\',$value,$wp_query->query_vars[\'case-log\']);
    $terms = get_the_terms( $post->ID, \'case-log\' );
    if ( !empty( $terms ) ){
        // get the first term
        $term = array_shift( $terms );
        $casesearch = implode(",", $terms);
        echo $casesearch;
        echo $term->slug;
    }

        $args = array(
             \'post_type\' => \'attorney\',
             \'pagename\' => $casesearch
        );
        $case_attorney = new WP_Query( $args );

        if ( $case_attorney->have_posts() ) : 
        ?>

            <?php while ( $case_attorney->have_posts() ) : $case_attorney->the_post() ?>
                    <div <?php post_class() ?>>
                        <h2><?php the_title() ?></h2>

                    </div>




                    <?php endwhile ?>
                <?php else : ?>
                    <h2>Ooops, no posts here!</h2>
                <?php endif ?>
有了以上内容,我可以使用echo$term->slug;,打印出slug;,循环运行,但它只会吐出每个律师的个人资料名称,似乎跳过了第二个参数。

非常感谢您的帮助,谢谢!

更新:侧栏模板的完整代码。

<header class="caseh">Attorneys</header>

<div class="caseattorneys">

    <?php 



    if( is_singular( "case" ) ) {

            //We are in single "case" view
            //Get the ID of current case post
            $case_id = get_queried_object_id();

            // Set "post_type" agument for the query
            $args = array(
                 \'post_type\' => \'attorney\'
            );

            //Get the terms from case-log taxonomy
            //get_the_terms returns an array of terms, false or a WP_Error object
            $terms = get_the_terms( $case_id, \'case-log\' );

            if( ! is_wp_error( $terms ) && $terms ) {

                 // Set "tax_query" agument for the query
                 $args[\'tax_query\'] = array(
                     array(
                         \'taxonomy\' => \'case-log\',
                         \'terms\'    => $terms
                     ),
                 );

            }

            $case_attorney = new WP_Query( $args );


         }

        if ( $case_attorney->have_posts() ) : 
        ?>

            <?php while ( $case_attorney->have_posts() ) : $case_attorney->the_post() ?>
                    <div <?php post_class() ?>>
                        <h2><?php the_title() ?></h2>

                    </div>




                    <?php endwhile ?>
                <?php else : ?>
                    <h2>Ooops, no posts here!</h2>
                <?php endif ?>

</div>

<div class="morefeaturedcases">

    <h3>More Featured Cases</h3>


</div>

<a href="/contact-us/" class="ccu">Contact Us</a>


</aside>

1 个回复
最合适的回答,由SO网友:cybmeta 整理而成

pagename 用于请求页面(核心page 立柱类型)通过slug。如果我理解正确的话,你想要的是得到属于同一个组织的“律师”职位case-log 当前“案例”帖子中的术语。我会这样做(不确定您将在哪里执行代码,我已尝试尽可能普遍地编写代码):

if( is_singular( "case" ) ) {

    //We are in single "case" view
    //Get the ID of current case post
    $case_id = get_queried_object_id();

    // Set "post_type" agument for the query
    $args = array(
         \'post_type\' => \'attorney\'
    );

    //Get the terms from case-log taxonomy
    //get_the_terms returns an array of term objects, false or a WP_Error object
    $terms = get_the_terms( $case_id, \'case-log\' );

    if( ! is_wp_error( $terms ) && $terms ) {

         $terms_ids = array();

         foreach( $terms as $term ) {
             $terms_ids[] = $term->term_id;
         }

         // Set "tax_query" agument for the query
         $args[\'tax_query\'] = array(
             array(
                 \'taxonomy\' => \'case-log\',
                 \'terms\'    => $terms_ids
             ),
         );

    }

    $case_attorney = new WP_Query( $args );

    if ( $case_attorney->have_posts() ) {

        while( $case_attorney->have_posts() ) {

            $case_attorney->the_post();
            ?>

            <div <?php post_class() ?>>
                <h2><?php the_title() ?></h2>
            </div>

            <?php

        }

        wp_reset_postdata();

    } else {

        echo "No matching attorney";

    }


 }

结束

相关推荐

WP_QUERY:如何在自定义分类中检索当前术语slug?

使用WP Types Plugin, 我设置了一个自定义post类型(slug:portfolio), 具有自定义分类法(slug:portfolio-category).自定义分类法有三项(slug:group1, group2, group3) 组织公文包帖子。在每个公文包页面上,我显示了来自同一分类术语的3篇相关帖子,按slug过滤:global $post; $term_list = wp_get_post_terms($post->ID, \'portfolio-cate