具有相同类别的上一个/下一个

时间:2015-11-01 作者:Advert-u

在我的公文包页面上,我有这个代码可以与shortcode一起使用。

一切都很好,但我需要下一个和上一个得到相同的类别。

代码如下:

add_shortcode( \'prev\', \'prev_shortcode\' );
add_shortcode( \'next\', \'next_shortcode\' );
function next_shortcode($atts) {
    global $post;
    ob_start(); 
    next_post_link( \'<div class="nav-next">%link</div>\', \'Next project\' );              
    $result = ob_get_contents();
    ob_end_clean();
    return $result;
}

function prev_shortcode($atts) {
    global $post;
    ob_start();
    previous_post_link( \'<div class="nav-previous">%link</div>\', \'Previous project\' );              
    $result = ob_get_contents();
    ob_end_clean();
    return $result;
}

2 个回复
SO网友:s_ha_dum

next_post_link() 接受将链接限制为同一类别的第三个参数。法典中有一个这样使用的例子:

next_post_link( \'%link\', \'Next post in category\', TRUE );
在相同的术语中(布尔值)(可选)指示下一篇文章是否必须与当前文章在相同的分类术语中。如果设置为“true”,则仅显示当前分类术语中的帖子。如果帖子同时位于父类和子类中,或多个术语中,则下一个帖子链接将指向这些术语中的下一个帖子。

真的假的默认值:假的

简而言之,您需要添加, TRUE 函数参数:

next_post_link( \'<div class="nav-next">%link</div>\', \'Next project\', TRUE ); 
以及:

previous_post_link( \'<div class="nav-previous">%link</div>\', \'Previous project\', True ); 

SO网友:Pieter Goosen

缓冲应该始终作为您的最后手段使用,另外还有一种方法用于尝试返回您的短代码输出。如你所知,next_post_link()previous_post_link() 将其结果回显到屏幕,但我们需要返回这些结果的输出,以避免意外输出。

这两个函数只是响应从get_next_post_link()get_previous_post_link() 因此这将是在您的短代码中使用的函数

示例:

add_shortcode( \'prev\', \'prev_shortcode\' );
add_shortcode( \'next\', \'next_shortcode\' );
function next_shortcode() {
    global $post;
    $result = get_next_post_link( \'<div class="nav-next">%link</div>\', \'Next project\' );              

    return $result;
}

function prev_shortcode() {
    global $post;
    $result = get_previous_post_link( \'<div class="nav-previous">%link</div>\', \'Previous project\' );              

    return $result;
}
然而,我在这里确实有一些担心,那就是,为什么您需要从一个短代码运行它。您很可能会在单个贴子页面中使用do_shortcode() 执行短代码。您需要记住,短代码需要被解析,这反过来又浪费了时间和资源(虽然可能只是很小的量)。短代码只能在页面编辑器的所见即所得编辑器中使用。如果您在除此之外的任何地方使用短代码(,即使用do_shortcode()),你做错了。

您只需使用next_post_link()previous_post_link() 正如模板中所示。它更快更好。

示例:

next_post_link( \'<div class="nav-next">%link</div>\', \'Next project\' ); 
previous_post_link( \'<div class="nav-previous">%link</div>\', \'Previous project\' ); 
除了@s\\u ha\\u dum所说的将第三个参数设置为true, 如果术语不属于内置分类法,还需要为术语所属的分类法设置第五个参数category.

因此,对于内置分类法category, 你会的

next_post_link( \'<div class="nav-next">%link</div>\', \'Next project\', true ); 
previous_post_link( \'<div class="nav-previous">%link</div>\', \'Previous project\', true );
对于自定义分类法,您可以

next_post_link( \'<div class="nav-next">%link</div>\', \'Next project\', true, \'\', \'MY_TAXONOMY\' ); 
previous_post_link( \'<div class="nav-previous">%link</div>\', \'Previous project\', true, \'\', \'MY_TAXONOMY\' ); 
在哪里MY_TAXONOMY 是自定义分类法的名称

相关推荐

Namespaced shortcode?

我正在改造一个旧的WP站点,该站点有许多自定义的短代码,显然由于代码当前的组织方式,这些短代码在性能方面付出了代价。当然,我可以修复优化不好的代码,使用十几个短代码,并且一天就可以完成,但我想知道如何更好地组织它们。根据WordPress\'documentation, 建议将它们放在插件中并在上初始化init. 我们可以通过这样“命名”它们来减少这个钩子中的负载吗?[com.company shortcode attr=\"attr\" prop=\"prop\"] 有人尝试过这样的解决方案吗