Я довольно новичок в 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;
}
}
Пожалуйста, следуйте инструкциям. Это может помочь вам.
Dashboard
> Appearance
> Menus
,wp_nav_menu()
для отображения меню.Обратите внимание, что ссылка на категорию направляет вас на соответствующую страницу категории, если и только если она существует category.php
страница в вашей папке тем.
Пожалуйста, посмотрите на этот цикл здесь:
foreach ($post_id as $id) {
$postarr = $id->object_id;
}
$posts = $wpdb->get_results("SELECT * FROM {$wpdb->prefix}posts WHERE ID IN ($postarr)");
Похоже, что ожидаемое значение для $postarr
в данный момент вы запрашиваете сообщения — это массив, содержащий идентификаторы сообщений. Тем не менее, когда вы делаете $postarr = $id->object_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;
Затем, поскольку мы не можем использовать переменную массива, как если бы она была строкой, нам нужно создать строку в виде списка идентификаторов, разделенных запятыми, для использования в 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);