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

2022-08-30 22:59:49

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

<?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获取帖子,但我的永久链接更改为帖子名称而不是帖子ID用于SEO目的。如何通过帖子名称获取帖子?

希望这里的某个人能弄清楚。谢谢。


答案 1

get_page_by_path()

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

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

以下是相关的法典条目

要获得帖子,而不是页面,您只需要提供“post”作为参数,并且通常(没有引号)作为类型,如下所示:$post_typeOBJECT$output

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

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

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

WP_Query / get_posts()

如果其中任何一个对您来说是一个问题,那么您应该考虑仅使用该类通过以下方式获取您的帖子:WP_Queryname

$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...
}

答案 2
function get_post_by_name($post_name, $output = OBJECT) {
    global $wpdb;
        $post = $wpdb->get_var( $wpdb->prepare( "SELECT ID FROM $wpdb->posts WHERE post_name = %s AND post_type='post'", $post_name ));
        if ( $post )
            return get_post($post, $output);

    return null;
}

这个东西。


推荐