2014-10-08 23 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