Показать сообщения в той же категории

Я довольно новичок в 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

Решение

Пожалуйста, следуйте инструкциям. Это может помочь вам.

  1. Создать новое меню в Dashboard > Appearance > Menus,
  2. Добавить категории в меню.
  3. Используйте функцию wp_nav_menu() для отображения меню.
  4. Ссылка на категорию в отображаемом меню приведет вас к соответствующей странице категории.

Обратите внимание, что ссылка на категорию направляет вас на соответствующую страницу категории, если и только если она существует category.php страница в вашей папке тем.

0

Другие решения

Пожалуйста, посмотрите на этот цикл здесь:

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);
0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector