自定义分类中的下一个/上一个链接,其中项目可能属于多个术语

时间:2014-09-24 作者:luke

我有一个“项目”的CPT和一个与之相关的自定义分类术语“部分”(基本上与“类别”相同,我只是发现在CPT上使用不同的术语名称比在标准帖子上使用不同的术语名称更清楚)。

因此,我通过/Projects访问我的所有项目,并且仅通过Projects/Design访问“Design”部分中的项目。一切都很好。

不过,我需要的是在单个项目视图上创建一次链接,以便将上一个/下一个链接绑定到current 分类法,即我需要以某种方式传递给单个项目。php模板是一种让it在链接到下一个/上一个项目时知道要保留哪种分类法的方法。

更复杂的是,项目可以有多种分类术语,例如“设计”和“开发”。如果直接访问项目而不通过分类页面,即通过示例。com/我的项目标题,那么下一个/上一个将完全忽略分类法并循环遍历所有项目。

有人知道如何解决这个问题吗?以前从未有过这种情况,这让我很失望。非常感谢您的帮助。

2 个回复
SO网友:luke

scribu的智能导航插件解决了我的这一需求:

https://wordpress.org/plugins/smarter-navigation/

虽然不完全完美,但可以识别正在使用的分类术语,并提供适当的链接。

SO网友:Stephen

我知道这很古老,但我自己一直在寻找答案,但什么都找不到,所以我想与大家分享。事实上,我最近不得不自己处理一个非常类似的设置。WordPress内置的相邻帖子链接的问题在于(正如你所提到的),如果你的帖子碰巧是多个词,那么下一个和上一个链接通常会跳转到其他类别中的一个,而不是停留在你想要的类别中。以下是我为解决此问题所做的:

第一部分是一个返回ID的便捷函数:

function ss_get_post_ids($term, $taxonomy)
{
    return get_posts(array(
        \'post_type\' => \'project\', // if you are using a CPT, put it here. 
        \'numberposts\'   => -1,
        \'tax_query\'     => array(
            array(
                \'taxonomy\'  => $taxonomy,
                \'field\'     => \'id\',
                \'terms\'     => is_array($term) ? $term : array($term),
            ),
        ),
        \'fields\'        => \'ids\',
    ));
}
接下来,我们将其命名为所需的术语和分类法:

$mytermid = \'5\'; // put your current term_id here
$mytaxonomy = \'project-type\'; // put your current taxonomy slug here
$relatedposts = ss_get_post_ids($mytermid, $mytaxonomy); // call our function above to get all the ids for this pair

global $post; 
$currentpostID = $post->ID; // get current post ID   
$currentKey = array_search($currentpostID, $relatedposts); //find current ID in our returned list of IDs to use it as base

// below get the previous and next IDs, and loop back to beginning if at end
$before = (isset($relatedposts[$currentKey - 1])) ? $relatedposts[$currentKey - 1] : $relatedposts[count($relatedposts) - 1];
$after = (isset($relatedposts[$currentKey + 1])) ? $relatedposts[$currentKey + 1] : $relatedposts[0];

// get the previous and next permalinks using the IDs above
$term_previous_post_link = get_permalink($before);
$term_next_post_link = get_permalink($after);
现在你可以使用$term_previous_post_link$term_next_post_link 取代WordPress自己的下一个和上一个帖子链接,它实际上将保持在同一期限内,即使有倍数。希望这对其他人有帮助,我花了很长时间努力寻找解决方案。

结束

相关推荐

自定义分类中的下一个/上一个链接,其中项目可能属于多个术语 - 小码农CODE - 行之有效找到问题解决它

自定义分类中的下一个/上一个链接,其中项目可能属于多个术语

时间:2014-09-24 作者:luke

我有一个“项目”的CPT和一个与之相关的自定义分类术语“部分”(基本上与“类别”相同,我只是发现在CPT上使用不同的术语名称比在标准帖子上使用不同的术语名称更清楚)。

因此,我通过/Projects访问我的所有项目,并且仅通过Projects/Design访问“Design”部分中的项目。一切都很好。

不过,我需要的是在单个项目视图上创建一次链接,以便将上一个/下一个链接绑定到current 分类法,即我需要以某种方式传递给单个项目。php模板是一种让it在链接到下一个/上一个项目时知道要保留哪种分类法的方法。

更复杂的是,项目可以有多种分类术语,例如“设计”和“开发”。如果直接访问项目而不通过分类页面,即通过示例。com/我的项目标题,那么下一个/上一个将完全忽略分类法并循环遍历所有项目。

有人知道如何解决这个问题吗?以前从未有过这种情况,这让我很失望。非常感谢您的帮助。

2 个回复
SO网友:luke

scribu的智能导航插件解决了我的这一需求:

https://wordpress.org/plugins/smarter-navigation/

虽然不完全完美,但可以识别正在使用的分类术语,并提供适当的链接。

SO网友:Stephen

我知道这很古老,但我自己一直在寻找答案,但什么都找不到,所以我想与大家分享。事实上,我最近不得不自己处理一个非常类似的设置。WordPress内置的相邻帖子链接的问题在于(正如你所提到的),如果你的帖子碰巧是多个词,那么下一个和上一个链接通常会跳转到其他类别中的一个,而不是停留在你想要的类别中。以下是我为解决此问题所做的:

第一部分是一个返回ID的便捷函数:

function ss_get_post_ids($term, $taxonomy)
{
    return get_posts(array(
        \'post_type\' => \'project\', // if you are using a CPT, put it here. 
        \'numberposts\'   => -1,
        \'tax_query\'     => array(
            array(
                \'taxonomy\'  => $taxonomy,
                \'field\'     => \'id\',
                \'terms\'     => is_array($term) ? $term : array($term),
            ),
        ),
        \'fields\'        => \'ids\',
    ));
}
接下来,我们将其命名为所需的术语和分类法:

$mytermid = \'5\'; // put your current term_id here
$mytaxonomy = \'project-type\'; // put your current taxonomy slug here
$relatedposts = ss_get_post_ids($mytermid, $mytaxonomy); // call our function above to get all the ids for this pair

global $post; 
$currentpostID = $post->ID; // get current post ID   
$currentKey = array_search($currentpostID, $relatedposts); //find current ID in our returned list of IDs to use it as base

// below get the previous and next IDs, and loop back to beginning if at end
$before = (isset($relatedposts[$currentKey - 1])) ? $relatedposts[$currentKey - 1] : $relatedposts[count($relatedposts) - 1];
$after = (isset($relatedposts[$currentKey + 1])) ? $relatedposts[$currentKey + 1] : $relatedposts[0];

// get the previous and next permalinks using the IDs above
$term_previous_post_link = get_permalink($before);
$term_next_post_link = get_permalink($after);
现在你可以使用$term_previous_post_link$term_next_post_link 取代WordPress自己的下一个和上一个帖子链接,它实际上将保持在同一期限内,即使有倍数。希望这对其他人有帮助,我花了很长时间努力寻找解决方案。

相关推荐