WordPress get_pages Параметр таксономии - PullRequest
2 голосов
/ 25 апреля 2011

Интересно, пытался ли кто-нибудь фильтровать контент через get_pages, используя собственную таксономию.У меня есть пользовательский тип поста с надписью «одежда», и я пытаюсь создать навигацию «Предыдущий и следующий», вытягивая только те части «одежды», которые имеют слаг «женский» в таксономии «пол».

Однако ссылки «Предыдущая» и «Следующая» содержат все элементы одежды, включая мои «мужские». Кто-нибудь имеет опыт работы с пользовательской таксономией и get_pages?

<?php

$args = array(
        'sort_column' => 'menu_order',
        'sort_order' => 'desc',
        'post_type' => 'clothing',
        'post_status' => 'publish',
        'gender'=> 'female'
);

$list = get_pages($args);
$pages = array();
foreach ($list as $page) {
   $pages[] += $page->ID;
}

$current = array_search($post->ID, $pages);
$prevID = $pages[$current-1];
$nextID = $pages[$current+1];
?>

<div class="post-nav">
    <?php if (!empty($prevID)) { ?>
    <a href="?pID=<?php echo $prevID ?>" title="<?php echo get_the_title($prevID); ?>" class="left">&#171; PREVIOUS</a>
    <?php }
    if (!empty($nextID)) { ?>
    <a href="?pID=<?php echo $nextID ?>" title="<?php echo get_the_title($nextID); ?>" class="right">NEXT &#187;</a>
    <?php } ?>
</div>

1 Ответ

0 голосов
/ 26 июня 2011

Использовал ваш код в сочетании с этим постом о предварительных запросах таксономии и придумал следующее:

<?php 

$myquery = array(
    'post_status' => 'publish',
    'posts_per_page' => -1,
    'meta_key' => 'whatever',
    'orderby' => 'meta_value',
    'order' => 'DESC',
    'post_type' => 'your_post_type',
);

$myquery['tax_query'] = array(
    array(
        'taxonomy' => 'your_tax',
        'terms' => array('your_term'),
        'field' => 'slug',
    ),
    array(
        'taxonomy' => 'your_other_tax',
        'terms' => array('your_other_term'),
        'field' => 'slug',
    ),
);

$queryObject = new WP_Query($myquery); 

while( $queryObject->have_posts() ) : $queryObject->the_post();

$posts_array[] = $post->ID;

endwhile;

wp_reset_query();

$current = array_search($post->ID, $posts_array); // returns key
$prevID = $posts_array[$current - 1]; // get value from key 1 before
$nextID = $posts_array[$current + 1]; // get value from key 1 after

$prevLINK = get_permalink( $prevID );
$nextLINK = get_permalink( $nextID );

$prevTITLE = get_the_title( $prevID );
$nextTITEL = get_the_title( $nextID );

?>

<div class="post-nav">
    <?php if (!empty($prevID)) { ?>
        <a href="<?php echo $prevLINK; ?>" title="<?php echo $prevTITLE; ?>" class="left">&#171; PREVIOUS</a>
    <?php }
    if (!empty($nextID)) { ?>
        <a href="<?php echo $nextLINK; ?>" title="<?php echo $nextTITLE; ?>" class="right">NEXT &#187;</a>
    <?php } ?>
</div>

Работает для меня, и это чертовски круто ... сОптимизация запросов по расширенной таксономии объясняет Отто, что вы действительно можете хорошо контролировать следующие / предыдущие ссылки.Я не смог бы понять это без твоего оригинального кода, так что безумный реквизит тебе и Отто!

Я собираюсь попытаться настроить это еще дальше, автоматически определяя термины изстраница ... get_the_term_list() может работать.

...