WordPress как на ладони
rgbcode is looking for WordPress developers.

Перелинковка постов

Использую код kama_previous_posts_from_tax для перелинковки.

По умолчанию вывожу перелинковку по общей категории, где есть всё, но сейчас возникла потребность удалить из перелинковки посты, которые находятся в определенной таксономии.

0
lethalblo
месяц назад 15
  • 0
    Kama9470

    В WHERE часть запроса нужно добавить условие AND tx.term_id NOT IN (12,13,14). Примерно так:

        $sub_query_tax_id = $wpdb->prepare(
    		"SELECT term_id FROM $wpdb->term_relationships rl
    			LEFT JOIN $wpdb->term_taxonomy tx ON (rl.term_taxonomy_id = tx.term_taxonomy_id)
    			WHERE object_id = %d AND tx.taxonomy = %s
    			AND tax.term_id NOT IN (12,13,14)
    			LIMIT 1",
    		$post->ID, $rg->tax
    	);

    Где 12,13,14 - это ID терминов, которые нужно исключить.

    lethalblo месяц назад

    Сработало не так как нужно.

    В итоге если захожу в пост, который находится в указанной таксономии, то перелинковка там просто исчезает. Мне нужно выполнить немного другую задачу.

    Есть общая категория в которой находятся все посты. Именно из этой категории формируется вся перелинковка.

    Есть таксономия, назовем ее "скрытые посты".

    Теперь заходим в любой пост без таксономии и видим в перелинковке посты, которые находятся в таксономии "скрытые посты", вот эти посты нужно спрятать.

    То есть "скрытые посты" нужно удалить везде, такое возможно?

    lethalblo месяц назад

    К делу не относится, но покажу чисто для наглядного примера, как я сделал вывод в WP_Query

    Вывожу все посты из общей рубрики "all-rub" и удаляю посты из таксономии. В перелинковке нужно сделать точно так же, чтобы все посты выводились из общей рубрики, но посты которые находятся в указанной таксономии были удалены.

        $args = array(      
    		'post_type'      => 'post', 
    		'posts_per_page' => 12,
    		'category_name' => 'all-rub',   
    		'relation' => 'OR',     
    		'tax_query' => array(
    			array(
    			'taxonomy' => 'razdel',
    			'field'    => 'id',
    			'terms'    => array( 1528, 1484, 1717 ),//удалить
    			'operator' => 'NOT IN',
    		)), 
    	);
    Kama месяц назад

    В том коде работа ведется с одной таксономией, а тут нужно работать с двумя. В мой из статьи нужно добавить это все в условия запроса и JOIN часть.

    Примерно так:

        $sub_query_tax_id = $wpdb->prepare(
    		"SELECT term_id FROM $wpdb->term_relationships rl
    			LEFT JOIN $wpdb->term_taxonomy tx ON (rl.term_taxonomy_id = tx.term_taxonomy_id)
    			LEFT JOIN $wpdb->term_taxonomy tx2 ON (rl.term_taxonomy_id = tx2.term_taxonomy_id)
    			WHERE object_id = %d AND ( tx.taxonomy = %s OR tx2.taxonomy = %s )
    			AND tx2.term_id NOT IN (12,13,14)
    			LIMIT 1",
    		$post->ID, $rg->tax, 'SECOND_TAX'
    	);

    Вообще, возможно проще самому написать запросы на WP_Query для такой перелинковки и не использовать код из статьи.

    lethalblo месяц назад

    В итоге не сработало. Проверил на второй версии перелинковки, вместо того, чтобы удалить из выдачи указанные таксономии, просто ничего не выводит. Может название таксономии нужно еще добавить?

    Я кстати настроил старую версию перелинковки уже много лет назад. В разных постах вывожу посты из нужных таксономий, это сейчас обстоятельства сложились так, что нужно удалить посты из нескольких таксономий. Сомневаюсь, что смогу реализовать это на WP_Query

    Kama месяц назад

    SECOND_TAX - надо заменить на название второй таксы...

    Вроде на WP_Query такое можно реализовать. По-хорошему мой код нужно переписать на WP_Query но время нет этим заниматься.

    lethalblo месяц назад

    Все равно не получилось, просто ничего не выводит

    Комментировать
На вопросы могут отвечать только зарегистрированные пользователи. Вход . Регистрация