web-dev-qa-db-ja.com

恥ずかしいパーマリンクを使用するとサイドバーに404とタグが返される

私は "醜い"パーマリンクを使っていますが、それらはindex.phpとsingle.phpでは問題ありません。私はarticle/postレベルでサイドバーを構築するsidebar.phpというテンプレートもあります。サイドバーのカテゴリとタグをクリックすると、404が返されます。実際のフォーマットは次のとおりです。

http:// localhost/mywebsite/tag/mytag

http:// localhost/mywebsite/category/mycategory

私が醜いパーマリンクを期待しているのとは対照的に(そしてそれはindex.phpとsingle.phpに示されています):

http:// localhost/mywebsite /?tag = 1

http:// localhost/mywebsite /?cat = 3

私のタグはこのように定義されています:

function printTags($tags){
    if ($tags!=false) {
      $return = '';
      foreach ($tags as $i){
        $return .= '<li><a href="' . home_url() . "/tag/" . $i->slug . '">' . $i->name . '</a></li>';
      }
      return $return;
    }
}




function getTags($tagData){
    $tagArray = [];
    if($tagData!=false){
      foreach ($tagData as $i){
        array_Push($tagArray, $i->name);
      }
    }
    return $tagArray;
}

私のHTML/PHPは以下の通りです。

function newSuggestion($itemTitle, $sectionSlug, $section, $image, $url, $tags){
    echo "<li class='row class'>
            <div class='col item'>
              <div class='row img-container'>
                <div class='col'>
                  <a href='{$url}'><img src='{$image}' alt='No Image'/></a>
                </div>
              </div>
              <div class='row anotherclass'>
                <div class='categories-container'>
                  <strong><a href='". home_url() ."/category/". $sectionSlug."'>{$section}</a></strong>
                </div>
                <div class='tags-container'>
                  <ul class='tags'>". printTags($tags) ."</ul>
                </div>
              </div>
              <div class='row title-container'>
                <h2 class='h3'><a href='{$url}'>{$itemTitle}</a></h2>
              </div>
            </div>
          </li>";
}

どこが悪いの?

ありがとうございました

EDIT1:

これがsidebar.phpのgetPosts関数です。

    function getPosts($posts, $numSuggestion){

      foreach ( $posts as $post ) {
         if ($post->ID!=get_the_ID() &&  $GLOBALS['currentSuggestion']<$numSuggestion && !in_array($post->ID, $GLOBALS['$alreadySuggested'])){
            $imageUrl = wp_get_attachment_url( get_post_thumbnail_id($post->ID));

            if ($imageUrl == false){
              $imageUrl = getDefaultImage();
            }
            newSuggestion($post->post_title, get_the_category($post->ID)[0]->slug, get_the_category($post->ID)[0]->name, $imageUrl, get_permalink($post->ID), get_the_tags($post->ID));
            $GLOBALS['currentSuggestion']++;
            array_Push($GLOBALS['$alreadySuggested'], $post->ID);
          }
      }
    }

EDIT2:

私はこれを試みました:

<div class='categories-container'>
                  <strong><a href='". home_url() ."/category/?cat=". $cat_ID."'>{$section}</a></strong>
                </div>

しかし成功しなかった、それは正しい方向です。カテゴリのURLを "home_url/category /?cat = 123"の形式で取得するには、どこで変更を加えますか。

編集3:

私は正しい方向に向かっているのかどうかわからないが、私は正しいURLを取得することができた、しかしそれは404を返します(記事/ホームレベルのカテゴリとは対照的に)

get_the_categoryがスラッグではなくcat_IDにマッピングされるようにgetPosts関数を修正しました(これが正しい方法であるかどうかはわかりません)。

 newSuggestion($post->post_title, get_the_category($post->ID)[0]->cat_ID, get_the_category($post->ID)[0]->name, $imageUrl,

それで私のnewSuggestion関数は次のようになります。

  <div class='categories-container'>
                  <strong><a href='". home_url() ."/category/?cat=". $sectionSlug."'>{$section}</a></strong>
                </div>

同じURLがサイトの他の部分(例:home/indexやarticle)で機能しているのに、なぜ私がまだ404を打っているのかという考えはありますか?

編集4:

私はついにこれを使って作業するカテゴリーを得ました:

<div class='categories-container'>
                  <strong><a href='". get_term_link( $sectionSlug) . "'>{$section}</a></strong>
                </div>
1
paranza

タグの提案に従って、カテゴリが機能するようになりました。

スラッグではなく、カテゴリをcat_IDにマッピングすることによって、getposts関数を修正しました。

newSuggestion($post->post_title, get_the_category($post->ID)[0]->cat_ID, get_the_category($post->ID)[0]->name, $imageUrl,

その後、NewSuggestion関数はこのようにしてカテゴリーを解決します。

<div class='categories-container'>
                  <strong><a href='". get_term_link( $sectionSlug) . "'>{$section}</a></strong>
                </div>

アプローチはうまくいきます、それをどのように改善するかについてのどんな提案または推薦も歓迎以上です。

0
paranza

の代わりに:

home_url() . "/tag/" . $i->slug

get_term_link() 関数を使用します。現在の設定に従って用語のリンクを返します。

// Assuming $i is a term object
get_term_link( $i->term_id )

たとえば、printTags()関数は次のようになります。

function printTags($tags){
    //Check to see if tags are provided
    if ($tags!=false) {
      $return = '';
      foreach ($tags as $i){
        $return .= '<li><a href="' . get_term_link( $i->term_id ) . '">' . $i->name . '</a></li>';
      }
      return $return;
    }
}
1
cybmeta