这里的第一个问题,虽然阅读和搜索已经多次保存我的培根.
我充其量只是一个PHP黑客,而我正在构建的Wordpress主题迫使我学到很多东西.
我遇到了一个问题,试图让下一个和上一个链接的格式根据各自的类别(而不是single.php的页面)进行不同的显示.
到目前为止,这是我最好的尝试:
<?php next_post_link(
'%link',
if ( in_category( 'tweet' ) ) {
get_the_content()
} else {
echo '%title'
};,
FALSE
)?>
Run Code Online (Sandbox Code Playgroud)
这会导致语法错误.
我的第一个问题是,我甚至可以在函数的参数中使用if-else语句吗?
如果我以完全错误的方式接近它,那么它就会回到绘图板上.我也很欣赏任何其他建议!
我知道以下工作:
next_post_link( '%link', get_the_title(), FALSE );
next_post_link( '%link', '%title', FALSE );
Run Code Online (Sandbox Code Playgroud)
为了更加清楚,我希望根据链接本身的类别影响下一个/上一个链接的输出,而不是它们所在的当前主页.
我遇到的问题是a)如何确定next_post_link()和previous_post_link()的类别,然后b)相应地显示它们的Link参数.如果我可以抛出白旗,我发现使用get_adjacent_post()和各种数组等的例子在这一点上似乎已经超出我的想象.我真的很感谢有人带我走过使用它们的任何解决方案.
我认为你把东西混合得太多了,这使得你的问题比需要的更加复杂。我知道对于许多新事物来说,这种情况很容易发生,因此我认为在开始编码之前花一些时间思考要做什么是值得的。它最终应该有所帮助。
开始制定您想要实现的目标。如果我理解正确,您会写到您希望根据类别以不同方式显示当前帖子下方的下一个和上一个链接。
但哪个类别呢?当前显示的帖子之一?或者上一个/下一个链接帖子的类别?
除此之外,帖子可以有多个类别。您想根据一个或多个甚至所有类别更改显示吗?
最后:您想输出大量HTML 标签来实现视觉样式吗?或者你想使用CSS来实现这一点。
在考虑完您真正想要实现的目标之后,您就可以决定如何实现这一目标。
下面我将展示一些示例代码,这些代码将执行以下操作:
因此,这个示例涵盖了通过主题的 CSS 进行视觉样式的链接帖子的类别,我认为这是更好的方法。
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);
?>
Run Code Online (Sandbox Code Playgroud)
您还可以在其周围添加 HTML 标签:
<?php
$format = '<span style="font-size:2em">%link</span>';
next_post_link($format);
?>
Run Code Online (Sandbox Code Playgroud)
这将使所有下一篇文章链接的标准字体大小增加一倍。
因此,现在为了使主题更容易一些,最好是添加类别的 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);
?>
Run Code Online (Sandbox Code Playgroud)
这会将下一篇文章链接包装成<span>包含链接文章的所有 CSS 类以及一个next-post-link类,以防您需要 CSS 选择器来设置链接样式。这里有一些 CSS 示例:
.next-post-link.category-tweet {font-size: 2em;}
Run Code Online (Sandbox Code Playgroud)
由于您有下一个和上一个链接,您可以复制该代码仅用于更改一个参数。但我们很懒,而是将其包装到它自己的函数中:
/**
* 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;
}
Run Code Online (Sandbox Code Playgroud)
将此函数放入您主题的functions.php. 然后它就可以在您的所有模板中使用。使用它现在变得非常容易:
<?php prev_post_link(my_prev_next_link_format()); ?>
...
<?php next_post_link(my_prev_next_link_format(false)); ?>
Run Code Online (Sandbox Code Playgroud)
如果您将所有这些放在一起,您可以轻松地在主题的 CSS 中设置下一个和上一个链接的样式。