2014-10-08 20 views
0

我對wordpress和博客相當陌生。我正在研究一個擁有多個博客的博客門戶,但他們都使用網站主頁上列出的常用類別。問題是,無論我在主頁上選擇哪個類別,它都會向我顯示完全相同帖子的頁面。 這裏是我的代碼:顯示在同一類別下的帖子

<div class="category-holder list-center"> 
       <h5>Kategoriat</h5> 
       <?php $site_url = get_bloginfo('wpurl'); ?> 
       <a target="_blank" href="<?php $site_url; ?>/tags/?avain=<?php the_field('cat1'); ?>"><?php the_field('cat1'); ?></a><br/> 
       <a target="_blank" href="<?php $site_url; ?>/tags/?avain=<?php the_field('cat2'); ?>"><?php the_field('cat2'); ?></a><br/> 
       <a target="_blank" href="<?php $site_url; ?>/tags/?avain=<?php the_field('cat3'); ?>"><?php the_field('cat3'); ?></a><br/> 
       <a target="_blank" href="<?php $site_url; ?>/tags/?avain=<?php the_field('cat4'); ?>"><?php the_field('cat4'); ?></a><br/> 
       <a target="_blank" href="<?php $site_url; ?>/tags/?avain=<?php the_field('cat5'); ?>"><?php the_field('cat5'); ?></a> 
      </div> 

能否請您提出一些PHP函數,或給我任何提示我應該做的,我應該在哪裏尋找這個問題的解決方案,我希望你明白,我只是?一個初學者,我想了解更多關於編程。 提前謝謝!

更新:我也有一個functions.php文件,代碼,可能是相關的部分:

function tag_posts() { 
    global $wpdb; 
    $tag = $_GET['avain']; 
    $taxarr = array(); 
    $postarr = array(); 
    $blogs = $wpdb->get_results("SELECT blog_id FROM {$wpdb->blogs} WHERE blog_id != {$wpdb->blogid} AND site_id = '{$wpdb->siteid}' AND spam = '0' AND deleted = '0' AND archived = '0'", ARRAY_A); 
    array_unshift($blogs, 1); 
    foreach($blogs as $blog) { 
     $wpdb->set_blog_id($blog[ 'blog_id' ]); 
     $tax_id = $wpdb->get_var("SELECT term_taxonomy_id FROM $wpdb->term_taxonomy WHERE term_id IN (SELECT term_id FROM $wpdb->terms WHERE name='$tag')"); 
     $post_id = $wpdb->get_results("SELECT object_id FROM $wpdb->term_relationships WHERE term_taxonomy_id = $tax_id"); 
     foreach ($post_id as $id) { 
      $postarr = $id->object_id; 
     } 

     $posts = $wpdb->get_results("SELECT * FROM {$wpdb->prefix}posts WHERE ID IN ($postarr)"); 
     global $post; 
     foreach ($posts as $post):setup_postdata($post); 

      '<div class="post"><header class="post-header"><div class="date-holder"><span>'.the_time('F jS, Y').'</span></div>'; 
      '<a href="'.$post->guid.'">'.$post->post_title.'</a></header>'; 
      '<div class="post-content">'.the_content().'</div></div>'; 
     endforeach; 
    } 
} 
+1

「我應該在哪裏尋找解決方案來解決這個問題?」 - 在這裏:http://codex.wordpress.org/老實說,如果你是新的WordPress和編碼,你有很多的學習在你面前。你需要閱讀,編碼,測試,失敗,閱讀,編碼,測試,失敗,閱讀,編碼,測試,成功!然後在遇到困難時詢問具體問題;)(有人可能會直接回答這個問題,但是,defo會做一些閱讀) – James 2014-10-08 22:23:19

+0

您是否看到過生成的HTML,並確保鏈接正確並正常工作?你的瀏覽器的地址欄? – 2014-10-08 23:53:22

+0

@AlejandroArbiza地址欄上的鏈接對應於我按下的鏈接名稱,但頁面上的輸出始終是相同的 – user3125917 2014-10-09 00:09:59

回答

0

請看一看這個循環在這裏:

foreach ($post_id as $id) { 
    $postarr = $id->object_id; 
} 

$posts = $wpdb->get_results("SELECT * FROM {$wpdb->prefix}posts WHERE ID IN ($postarr)"); 

它似乎是在您查詢帖子時,$postarr的期望值是一個具有帖子ID的數組。但是,當您執行$postarr = $id->object_id;時,您將覆蓋分配給它的變量僅結果集中的最後一個 ID,結果是整數變量而不是數組。

所以我建議這樣的事情,而不是:

foreach ($post_id as $id) { 
    $postarr[] = $id->object_id; 
} 

$postsAsCommaSepString = implode(',', $postarr); 

$posts = $wpdb->get_results("SELECT * FROM {$wpdb->prefix}posts WHERE ID IN ($postsAsCommaSepString)"); 

首先,我們將條目添加到$postarr,請注意括號:

$postarr[] = $id->object_id; 

然後,因爲我們不能使用數組變量就像它是一個字符串一樣,我們需要創建一個字符串作爲逗號分隔的ID列表,用於SQL IN。對於這一點,我們破滅的陣列成一個字符串使用逗號作爲分隔符:

$postsAsCommaSepString = implode(',', $postarr); 

最後,我們使用這個新的字符串變量查詢:

$posts = $wpdb->get_results("SELECT * FROM {$wpdb->prefix}posts WHERE ID IN ($postsAsCommaSepString)"); 

這應該解決獲取同樣的問題每次發佈。

編輯:壞查詢:

也有在此查詢的問題:

$blogs = $wpdb->get_results("SELECT blog_id FROM {$wpdb->blogs} WHERE blog_id != {$wpdb->blogid} AND site_id = '{$wpdb->siteid}' AND spam = '0' AND deleted = '0' AND archived = '0'", ARRAY_A); 

在SQL中,不等於操作是這樣的<>,而不是!=。請參閱下面更正的表格:

$blogs = $wpdb->get_results("SELECT blog_id FROM {$wpdb->blogs} WHERE blog_id <> {$wpdb->blogid} AND site_id = '{$wpdb->siteid}' AND spam = '0' AND deleted = '0' AND archived = '0'", ARRAY_A); 
+0

謝謝你的建議,但這並沒有解決問題。我是否應該編寫一些可以根據名稱選擇類別的函數? – user3125917 2014-10-08 23:49:35

+0

@ user3125917請注意,我根據您提供的新信息更改了我的原始答案,以解決問題。 – 2014-10-10 12:50:49

+0

非常感謝你,但它仍然給我一個錯誤的輸出( – user3125917 2014-10-10 13:41:27

0

請按照下列步驟操作。這可能會幫助你。

  1. 創建Dashboard>Appearance>Menus一個新的菜單。
  2. 將類別添加到菜單中。
  3. 使用功能wp_nav_menu()顯示菜單。
  4. 顯示的菜單中的分類鏈接將引導您進入相應的分類頁面。

請注意,當您的主題文件夾中存在category.php頁面時,該類別鏈接將引導您進入相應的類別頁面。

+0

我給我的文章添加了一些代碼,希望這是你的意思! – user3125917 2014-10-10 11:42:42

+0

好吧,很好。我建議? – 2014-10-10 11:45:56

+0

問題是我的主題只支持一個菜單,而且我想使用鏈接,甚至有可能嗎? – user3125917 2014-10-10 11:52:41