我对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;
}
}
答案 0 :(得分: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中, 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);
答案 1 :(得分:0)
请按照步骤操作。这可能会对你有帮助。
Dashboard
&gt;中创建新菜单Appearance
&gt; Menus
。wp_nav_menu()
显示菜单。请注意,当且仅当您的主题文件夹中存在category.php
页时,类别链接会将您引导至相应的类别页面。