通过帖子名称而不是 id 获取帖子

新手上路,请多包涵

好的,我目前有这段代码。

 <?php

$post_id = 266;
echo "<div id='widgets-wrapper3'><div id='marginwidgets' style='overflow: auto; max-    width: 100%; margin: 0 auto; border: none !important;'>";
$queried_post = get_post($post_id);
echo "<div class='thewidgets'>";
echo substr($queried_post->post_content, 0, 500);
echo "<a href='".get_permalink( 26 )."' title='Read the whole post' class='rm'>Read     More</a>";
echo "</div>";

echo "</div></div>";

?>

正如您在上面的代码中所看到的,常规是通过 ID 获取帖子,但出于 SEO 目的,我的永久链接更改为帖子名称而不是帖子 ID。如何通过帖子名称获取帖子?

希望这里有人能弄清楚。谢谢你。

原文由 Kheorke 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 473
2 个回答

使用 WP_Query 。此函数将检索具有给定名称的第一篇文章,或者 null 如果没有找到:

 function get_post_by_name(string $name, string $post_type = "post") {
    $query = new WP_Query([
        "post_type" => $post_type,
        "name" => $name
    ]);

    return $query->have_posts() ? reset($query->posts) : null;
}

默认情况下,这将搜索类型为 post 的项目:

get_post_by_name("my-post")

作为第二个参数,您可以将其设置为其他参数:

get_post_by_name("my-page", "page")

原文由 Husky 发布,翻译遵循 CC BY-SA 4.0 许可协议

get_page_by_path()

WordPress 有一个内置功能,可能会有所帮助,但请注意几句。

<?php get_page_by_path( $page_path, $output, $post_type ) ?>

这是相关的 Codex 条目

要获得帖子而不是页面,您只需提供“帖子”作为 $post_type 参数,通常 OBJECT (不带引号)作为 $output 输入,像这样:

<?php get_page_by_path( 'my_post_slug', OBJECT, 'post' ) ?>

请注意,此功能不会检查匹配帖子的已发布或私人状态。如果您要查找的项目是附件,这很好,但对于帖子和页面(即草稿、私人帖子等)可能会有问题

请注意,如果它 您要查找的页面,并且该页面是分层的(即:它有一个父页面),那么您需要提供整个路径,即:’parent_page_slug/my_page_slug’。

WP_Query / get_posts()

如果这些中的任何一个对你来说是个问题,那么你应该考虑只使用 WP_Query 类来获得你的帖子 name

 $found_post = null;

if ( $posts = get_posts( array(
    'name' => 'my_post_slug',
    'post_type' => 'post',
    'post_status' => 'publish',
    'posts_per_page' => 1
) ) ) $found_post = $posts[0];

// Now, we can do something with $found_post
if ( ! is_null( $found_post ) ){
    // do something with the post...
}

原文由 Tom Auger 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏