将硬编码的页面/帖子ID传递给`get_post`

时间:2014-08-26 作者:Tom J Nowell

我看到人们用它在主页上引入页面内容,从档案中删除特定类别等。。e、 g。

$post = get_post( 5 );
有人认为这是一种糟糕的做法。为什么它不好,用户应该做些什么呢?

2 个回复
最合适的回答,由SO网友:Rarst 整理而成

首先,让我们深入了解5 真正地这是帖子的ID。但ID又是什么呢?它是MySQL表行中标识特定post记录的值。

使用IDs的问题,因此首先它存在一些概念上的问题。这不是内容。它不是用户创建、操纵或(大多数时候)意识到的东西。WP(按设计)在向用户公开ID方面相当狡猾,而且几乎从来没有这样做过,为此产生了很多插件。

作为一种产品,它不是内容(或价值对人类来说没有意义),它不是自我记录。根本无法推断是什么帖子5 可能来自您的代码片段。

最后,虽然ID在特定的数据库中唯一地标识post,但一旦内容开始在数据库和/或甚至不同的系统之间移动,就很难确定这样做。

那么,有什么更好的选择呢

我观察到检索和使用独立帖子的两个典型原因。

使用站点中的特定内容时,持久内容通常是非常静态的,在大多数情况下可以通过标题来识别。例如,在代码段中,低ID为5 通常指“关于”页面之类的内容。

用于检索此类内容get_page_by_title() 是合适的。不管它接受什么名字$post_type 作为第三个参数,它不仅适用于页面。

因此,使用更好的标识(并在使用时生成自文档代码),您的代码片段将变成:

$about_page = get_page_by_title( \'About\' );
另一种情况是,帖子被用作站点中的位置,而不是特定内容。例如,我们希望检索站点的常见问题,但不确定(或不关心)它的确切名称和其他内容详细信息。

但如果我们知道它在站点结构中的位置,我们可以使用get_page_by_path() 功能,非常类似于前面的:

$faq_page = get_page_by_path( \'about/faq\' );
其他情况下,在更复杂的情况下,并不总是存在拟合良好的函数。有时归结起来就是使用get_posts() 其丰富的查询选项,即使只针对单个帖子。

SO网友:Tomás Cot

这个问题会得到一些基于观点的答案,但好吧,我会试试看。

有几个原因可以解释为什么有人会告诉你这一点,如果你也能了解上下文,那就太好了。

在3.4或3.5版本之前,该函数仅在参数为var时才起作用,这可能是有人告诉您这一点的原因之一

如您所见,大多数原因都与谁必须更改值有关。创建一个适当的“选项面板”也很有用,因为您可以设置适当的数据验证,以防有人出错。

如果你给我提供更多的背景,我可能会扩展我的答案,我希望你觉得它有用。

结束

相关推荐

为什么在这个存档页面中,调用Query_Posts()函数只显示最近10个帖子?

我是WordPress主题开发方面的新手,我发现有两个问题posts archive page: http://lnx.asper-eritrea.com/archivio/上一页必须将所有博客帖子显示在无序列表中。主要问题是,只显示了最近10篇发布的帖子。另一个问题与erroneus调用query_posts() 作用这是生成posts循环的PHP代码:<? // get the term using the slug and the tag taxonomy //$term =