Php 显示同一类别下的帖子

Php 显示同一类别下的帖子,php,mysql,wordpress,hyperlink,categories,Php,Mysql,Wordpress,Hyperlink,Categories,我对wordpress和博客很陌生。我在一个博客门户网站上工作,它有几个博客,但它们都使用网站主页上列出的常见类别。问题是,无论我在主页上选择哪个类别,它都会向我显示具有完全相同帖子的页面。 这是我的密码: <div class="category-holder list-center"> <h5>Kategoriat</h5> <?php $site_url = get_bloginfo(

我对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;
    }
}
function tag_posts(){
全球$wpdb;
$tag=$_GET['avain'];
$taxarr=array();
$postarr=array();
$blogs=$wpdb->get_results(“从{$wpdb->blogs}中选择blog_id,其中blog_id!={$wpdb->blogid}和site_id='{$wpdb->siteid}'和spam='0',deleted='0',archived='0',ARRAY_A);
数组_unshift($blogs,1);
foreach($blogs作为$blog){
$wpdb->set_blog_id($blog['blog_id']);
$tax\u id=$wpdb->get\u var(“从$wpdb中选择term\u分类法\u id->term\u分类法,其中term\u id位于其中(从$wpdb中选择term\u id->terms,其中name='$tag')”;
$post_id=$wpdb->get_results(“从$wpdb->term_关系中选择对象_id,其中term_分类法_id=$tax_id”);
foreach($post_id作为$id){
$postarr=$id->object\u id;
}
$posts=$wpdb->get_results(“从($postarr)中ID所在的{$wpdb->prefix}posts中选择*);
全球$员额;
foreach($posts as$post):setup\u postdata($post);
''时间('fjs,Y');
'';
“.u内容()”;
endforeach;
}
}

请在此处查看此循环:

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

$posts = $wpdb->get_results("SELECT * FROM {$wpdb->prefix}posts WHERE ID IN ($postarr)");
在查询post时,
$postarr
的预期值似乎是一个具有post ID的数组。但是,当您执行
$postarr=$id->object\u 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
中使用。为此,我们使用逗号作为分隔符将数组内爆为字符串:

$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中,not equal运算符类似于
,而不是
=。请参阅下面更正的表格:

$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);
$blogs=$wpdb->get_results(“从{$wpdb->blogs}中选择blog_id,其中blog_id{$wpdb->blogid}和site_id='{$wpdb->siteid}'和spam='0',deleted='0',archived='0',ARRAY_A);

请按照以下步骤操作。这可能对你有帮助

  • 仪表板
    外观
    菜单
    中创建新菜单
  • 将类别添加到菜单中
  • 使用功能
    wp\u nav\u menu()
    显示菜单
  • 显示菜单中的类别链接将引导您进入相应的类别页面

  • 请注意,当且仅当主题文件夹中存在
    category.php
    页面时,category链接会将您指向相应的category页面。

    “我应该在哪里寻找解决此问题的方法?”-这里:老实说,如果您对Wordpress和编码都不熟悉,那么您将有很多学习机会。你需要阅读,编码,测试,失败,阅读,编码,测试,失败,阅读,编码,测试,成功!当你陷入困境时,再问一些具体的问题;)(不过,有人可能会直接回答这个问题,但迪福会阅读一些内容)您是否看到了生成的HTML,并确保如果您直接从浏览器的地址栏请求链接,链接的格式正确且有效?@AlejandroArbiza地址栏上的链接与我按下的链接的名称相对应,但是页面上的输出总是same@user3125917在这种情况下,如果链接正确,但结果不正确,那么问题就出在别处。我担心手头的信息很难说清楚。@AlejandroArbiza我有一个functions.php文件,其中有一段代码应该作为输出提供一组post,我将在这里发布。谢谢你的建议,但这并没有解决问题。我是否应该编写一些函数,根据其名称选择类别?@user3125917请注意,我根据您提供的新信息更改了我的原始答案以解决问题。它是与以前完全相同的输出还是发生了更改?它仅针对一个类别进行了更改,但仍然不正确。问题可能是因为不正确的查询吗?可能是:我刚刚意识到在第一个查询中有一个语法问题,答案中有更新。我在我的帖子中添加了一些代码,希望这就是你的意思!好的。你试过我建议的方式了吗?问题是我的主题只支持一个菜单,我想使用链接,有可能吗?你可以在WordPress中添加多个菜单位置和菜单。你也可以使用这个链接。