首頁>Web>source

我有两个功能顯示所選分類法的術語列表:

第一个功能:

$terms = get_the_terms(get_the_ID(), 'MY_TAXONOMY');
if (!is_wp_error($terms) && !empty($terms)) {
    foreach ($terms AS $term) {
        $name = $term->name;
        $link = add_query_arg('fwp_typ', FWP()->helper->safe_value($term->slug), 'https://www.MYWEBSITE.com/');
        echo "<a href='$link'>$name</a><br />";
    }
}      

第二功能:

   global $post;
    $taxonomy = 'MY_TAXONOMY';
    $terms = wp_get_post_terms( $post->ID, $taxonomy, array( "fields" => "ids" ) );
    if( $terms ) {
        echo '<?ul>';
        $terms = trim( implode( ',', (array) $terms ), ' ,' );
        wp_list_categories( 'title_li=&taxonomy=' . $taxonomy . '&include=' . $terms );
        echo '<?/ul>';
    }

第一个忽略層次結構,但根据需要轉換鏈接,即使它们匯致查詢wP的Facet插件.我知道這是關键所在:

$link = add_query_arg('fwp_typ', FWP()->helper->safe_value($term->slug), 'https://www.MYWEBSITE.com/');

第二个包含層次結構,但是鏈接没有指向我想要的位置.如何使第二个功能像第一个一樣轉換鏈接?

最新回復
  • 2020-5-19
    1 #

    這可以通過多種方式實現.其中之一是過濾術語鏈接与您想要的結構。

    以下功能是可以根据您的結構轉換術語鏈接的功能.忽略第一个引數,它在那裏,因為我们將使用此函式作為過濾器回撥。

    /**
     * @param string  $termlink Term link.
     * @param WP_Term $term Term object.
     */
    function wpse366737_pre_term_link( $termlink, $term ) {
        return add_query_arg(
            'fwp_typ', 
            FWP()->helper->safe_value( $term->slug ), 
           'https://www.MYWEBSITE.com/'
        );
    }
    

    現在,我们有了一个函式,可以在適当的地方使用它来修改術語鏈接.完成後,我们將删除過濾器,以免其他使用術語鏈接的指令碼受到影响。

    global $post;
    $taxonomy = 'MY_TAXONOMY';
    $terms = wp_get_post_terms( $post->ID, $taxonomy, array( "fields" => "ids" ) );
    if ( $terms ) {
        echo '<ul>';
        $terms = trim( implode( ',', (array) $terms ), ' ,' );
        // as we needed.
        add_filter( 'pre_term_link', 'wpse366737_pre_term_link', 10, 2 );
        // this list will display the filtered url for term.
        wp_list_categories( 'title_li=&taxonomy=' . $taxonomy . '&include=' . $terms );
        // remove the filter so other script doesn't get affected.
        remove_filter( 'pre_term_link', 'wpse366737_pre_term_link', 10 );
        echo '</ul>';
    }
    

  • 2020-5-19
    2 #

    解決了丑陋的問题,但有效.過濾器的一般形式:

    <?php
    add_filter('term_link', function ($termlink, $term, $taxonomy) {
        if ('CPT-TAXONOMY-NAME' == $taxonomy) {
            $termlink = trailingslashit(get_home_url()) . '?FACETWP-FACET-NAME=' . $term->slug;
        }
        return $termlink;
    }, 10, 3);
    

    fuctions.php中的函式:

    <?php
    function list_hierarchical_terms($taxonomy) {
        global $post;
        $terms = wp_get_post_terms( $post->ID, $taxonomy, array( "fields" => "ids" ) );
        if( $terms ) {
            echo '<?ul>';
            $terms = trim( implode( ',', (array) $terms ), ' ,' );
            wp_list_categories( 'title_li=&taxonomy=' . $taxonomy . '&include=' . $terms );
            echo '<?/ul>';
        }
    }
    

    現在,我不知道如何簡化它.在functions.php中過濾器的功能:

    <?php
    function termlink_transformation_freuciv_post_type($termlink, $term, $taxonomy)
    {
        if ('freuciv_post_type' == $taxonomy) {
            $termlink = trailingslashit(get_home_url()) . '?fwp_typ=' . $term->slug;
        }
        return $termlink;
    }
    function termlink_transformation_category($termlink, $term, $taxonomy)
    {
        if ('category' == $taxonomy) {
            $termlink = trailingslashit(get_home_url()) . '?fwp_categories=' . $term->slug;
        }
        return $termlink;
    }
    function termlink_transformation_hierarchical_tags($termlink, $term, $taxonomy)
    {
        if ('hierarchical_tags' == $taxonomy) {
            $termlink = trailingslashit(get_home_url()) . '?fwp_tags=' . $term->slug;
        }
        return $termlink;
    }
    

    在模板部分:

    <?php
    add_filter('term_link', 'termlink_transformation_freuciv_post_type', 10, 3);
    list_hierarchical_terms('freuciv_post_type', '<h5 style="margin-bottom: 5px">Typ: </h5>');
    remove_filter( 'term_link', 'termlink_transformation_freuciv_post_type', 10 );
    add_filter('term_link', 'termlink_transformation_category', 10, 3);
    list_hierarchical_terms('category', '<h5 style="margin-bottom: 5px; margin-top: 10px;">Kategorien: </h5>');
    remove_filter( 'term_link', 'termlink_transformation_category', 10 );
    add_filter('term_link', 'termlink_transformation_hierarchical_tags', 10, 3);
    list_hierarchical_terms('hierarchical_tags', '<h5 style="margin-bottom: 5px; margin-top: 10px;">Tags: </h5>');
    remove_filter( 'term_link', 'termlink_transformation_hierarchical_tags', 10 ); 
    

    這裏重複太多.我不知道如何簡化它。

  • google analytics:為什麼Google Analytics(分析)中的总使用者數略有不同?
  • wordpress:wordPress本地安裝主题檔案夹權限进行編輯