Wordpress:将if-else语句插入next_post_link()/ previous_post_link()参数?

时间:2011-06-18 09:16:21

标签: php wordpress

这里的第一个问题,虽然阅读和搜索已经多次保存我的培根。

我是一个PHP hack 和我正在构建的Wordpress主题迫使我学到很多东西。

我遇到了一个问题,试图让下一个&以前链接的格式根据各自的类别(而不是single.php的页面)进行不同的显示。

到目前为止,这是我最好的尝试:

<?php next_post_link(
    '%link',
    if ( in_category( 'tweet' ) ) {
        get_the_content()
    } else {
        echo '%title'
    };,
    FALSE 
)?>

这会导致语法错误。

我的第一个问题是我甚至可以在函数的参数中使用if-else语句吗?

如果我以完全错误的方式接近它,那么它会回到绘图板上。我也很欣赏任何其他建议!

我知道以下工作:

next_post_link( '%link', get_the_title(), FALSE );
next_post_link( '%link', '%title', FALSE );

为了尝试更清楚,我希望根据链接本身的类别影响下一个/上一个链接的输出,而不是它们所在的当前主页。 < / p>

我遇到的问题是a)如何确定next_post_link()和previous_post_link()的类别,然后b)相应地显示他们的Link参数。如果我可以抛出白旗,我发现使用get_adjacent_post()和各种数组等的例子在我看来似乎已经超出了我的想象。我非常感谢有人带我走过使用它们的任何解决方案。

3 个答案:

答案 0 :(得分:2)

目标是什么?

我认为你混合的东西太多了,这使得你的问题比它需要的更复杂。我知道很多新东西,这很容易发生,所以我认为在开始编码之前花一些关于要做什么的想法是值得的。它应该有助于最终。

开始制定你想要达到的目标。如果我理解你,你写的是你想要根据类别不同地显示当前帖子下面的下一个和上一个链接。

但是哪个类别? 显示的当前帖子之一?或者上一个/下一个链接帖子的类别

接下来,帖子可以包含多个类别。是否要根据一个或多个甚至所有类别更改显示?

最后:你想为视觉样式输出大量的 HTML标签吗?或者你想使用 CSS

怎么做?

在您考虑了您实际想要实现的后,您可以让您的思维 如何实现。

在下文中,我将展示一些将执行以下操作的示例代码:

  • 说明您要更改的 link-format 参数的使用。
  • 显示如何获取相关链接的CSS类。
  • 使用这些CSS类扩展主题的输出。
  • 使其可以重复使用主题中的不同文件。

所以这个例子通过你的主题CSS来涵盖视觉样式的链接帖子的类别,我认为这是最好的方法。

PHP代码

PHP非常灵活,所以它最终很容易完成,但不知道究竟要做什么,PHP的这种灵活性可能会成为一个问题,因为它也可能会松散跟踪,然后编写非 - 工作。

我们只想说你想改变next_post_link()功能的链接格式

该功能会将%link替换为HTML链接标记(<a href=...>Post Title</a>),因此如果您将'This is the next post of my blog: %link; waiting to be read!'作为参数,则会在链接周围添加一些文字。

<?php
  $format = 'This is the next post of my blog: %link; waiting to be read!';
  next_post_link($format);
?>

您还可以在其周围添加HTML标记:

<?php
  $format = '<span style="font-size:2em">%link</span>';
  next_post_link($format);
?>

这将使所有下一个帖子链接的标准字体大小加倍。

所以现在为了使主题更加容易,最好是添加类别的css类,然后你可以在CSS中轻松更改显示。

<?php
  $inSameCategory = true; // depends on what you want, can be false as well
  $nextPost = get_adjacent_post($inSameCategory, '', false);
  $cssClasses = get_post_class('next-post-link ', $nextPost);
  $format = sprintf('<span class="$s>%link</span>', $cssClasses);
  next_post_link($format);    
?>

这会将下一个帖子链接包含到<span>中,其中包含链接帖子的所有CSS类以及next-post-link类,以防您需要使用CSS-selector来设置链接样式。这里有一些CSS示例:

.next-post-link.category-tweet {font-size: 2em;}

使其可重复使用

由于您有下一个和上一个链接,您可以复制该代码仅用于更改一个参数。但是我们很懒,而是将它包装成它自己的函数:

  /**
   * my theme's format string for prev|next_post_link()
   *
   * @param bool $previous (optional) previous (true, default) or next (false) post
   * @param bool $inSameCategory (optional) use same category, default: true
   * @return string
   */
  function my_prev_next_link_format($previous = true, $inSameCategory = true) {
    $postId = get_adjacent_post($inSameCategory, '', $previous);
    $cssClasses = get_post_class('next-post-link ', $nextPost);
    $format = sprintf('<span class="$s>%link</span>', $cssClasses);
    return $format;
  }

将此功能放入主题functions.php。它可以在所有模板中使用。使用它现在变得非常容易:

<?php prev_post_link(my_prev_next_link_format()); ?>
...
<?php next_post_link(my_prev_next_link_format(false)); ?>

如果您将所有内容放在一起,则可以轻松设置主题CSS中下一个和上一个链接的样式。

答案 1 :(得分:0)

你试过anonymous functions吗?这样,您就可以在函数

中使用if-else语句

答案 2 :(得分:0)

尝试:

$format_string = in_category('tweet') ? 
'<span style="color:red;">%link</span>' : '%link';

next_post_link($format_string);

第二个和第三个参数是可选的,默认为title和false。

编辑:

我不知道这个插件,但是..

if(in_category('tweet')){
$format_string = '<span style="color:red;">%link</span>';
$link_text = get_the_content();
}else{
$format_string = '%link';
$link_text = '%title';  
}

next_post_link($format_string, $link_text);