WordPress查询Slug的单篇文章


85

当我想不使用循环显示单个帖子时,请使用以下命令:

<?php
$post_id = 54;
$queried_post = get_post($post_id);
echo $queried_post->post_title; ?>

问题是,当我移动网站时,id通常会更改。有没有办法通过slug查询此帖子?


3
为什么在移动网站时ID会更改?除非您使用WP的导入/导出功能(不太可靠,我建议避免使用)来移动网站。如果仅迁移数据库,则什么都不会改变。
恩努伊

Answers:


119

从WordPress Codex:

<?php
$the_slug = 'my_slug';
$args = array(
  'name'        => $the_slug,
  'post_type'   => 'post',
  'post_status' => 'publish',
  'numberposts' => 1
);
$my_posts = get_posts($args);
if( $my_posts ) :
  echo 'ID on the first post found ' . $my_posts[0]->ID;
endif;
?>

WordPress Codex获取帖子


1
这显示了ID-$ my_posts [0]-> ID; -但是如何显示页面内容?我已经尝试了一切,但没有任何效果!
詹姆斯·威尔逊

1
@JamesWilson开始使用kint。echo $my_posts[0]->post_content
Toskan

如果某些弹头非常相似(例如“工作”与“工作”),这似乎会返回多个结果,因此模棱两可
Simon H

2
不知道为什么,但是我必须将“ name”更改为“ post_name”,此查询才能为我工作
Mike

这样可以获取特色图片$ feat_image = wp_get_attachment_url(get_post_thumbnail_id($ my_posts [0]-> ID));
奥马尔(Omar)

68

怎么样?

<?php
   $queried_post = get_page_by_path('my_slug',OBJECT,'post');
?>

9
注意孩子的网页或分层自定义文章类型:my-slug应该成为my-parent-slug/my-slugcodex.wordpress.org/Function_Reference/...
Erenor拉巴斯

2
自从阅读本文以来的经验支持@Erenor Paz-确实确实很简单,但是当您依靠子弹的一致性时会变得复杂-这可以通过更改父帖子来简单地改变...叹气-也许我们可以说服WordPress开发人员在路径中允许使用通配符,例如:get_page_by_path('* / my_slug');
aequalsb '17

不太可靠
Amin

7

较便宜且可重复使用的方法

function get_post_id_by_name( $post_name, $post_type = 'post' )
{
    $post_ids = get_posts(array
    (
        'post_name'   => $post_name,
        'post_type'   => $post_type,
        'numberposts' => 1,
        'fields' => 'ids'
    ));

    return array_shift( $post_ids );
}

6

由于wordpress api已更改,因此无法将get_posts与参数“ post_name”一起使用。我对Maartens函数进行了一些修改:

function get_post_id_by_slug( $slug, $post_type = "post" ) {
    $query = new WP_Query(
        array(
            'name'   => $slug,
            'post_type'   => $post_type,
            'numberposts' => 1,
            'fields'      => 'ids',
        ) );
    $posts = $query->get_posts();
    return array_shift( $posts );
}

为了'no_found_rows' => true获得更高的性能,我还将添加到get_posts参数中。
菲利普
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.