如何从标题或插件获取帖子(页面或CPT)ID?

时间:2011-03-06 作者:jnthnclrk

我仔细查看了该法典,未能使get\\u page\\u by\\u title()正常工作,并且对该任务似乎没有标准的WP函数感到非常惊讶。

我需要使用帖子/页面标题的slug来获取任何给定帖子/cpt或页面的ID。理想情况下,我正在寻找以下方面:

get_post_ID_by_title(\'My post title\', \'customposttype\');

我该怎么办?

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

您可以使用google“按标题获取帖子”跳转的此功能

/**
* Retrieve a post given its title.
*
* @uses $wpdb
*
* @param string $post_title Page title
* @param string $post_type post type (\'post\',\'page\',\'any custom type\')
* @param string $output Optional. Output type. OBJECT, ARRAY_N, or ARRAY_A.
* @return mixed
*/
function get_post_by_title($page_title, $post_type =\'post\' , $output = OBJECT) {
    global $wpdb;
        $post = $wpdb->get_var( $wpdb->prepare( "SELECT ID FROM $wpdb->posts WHERE post_title = %s AND post_type= %s", $page_title, $post_type));
        if ( $post )
            return get_post($post, $output);

    return null;
}

SO网友:Dave Konopka

缺少函数参数。为第二个可选参数$output输入null,该函数应该适合您。

get_page_by_title(\'My post title\', null, \'customposttype\');
我只是遇到了同样的问题,添加null为我解决了这个问题。

SO网友:EAMann

我倾向于回避直接的DB查询。相反,我使用WP_Query 对象来为我分析事物。

基本上,这是我在一个主题中使用的一个函数,用于根据给定的slug获取帖子:

function get_post_id( $slug, $post_type ) {
    $query = new WP_Query(
        array(
            \'name\' => $slug,
            \'post_type\' => $post_type
        )
    );

    $query->the_post();

    return get_the_ID();
}
这将使用WP API创建一个查询,以获取具有给定slug的特定类型的帖子,并对结果运行常规循环函数,并返回帖子的ID。您还可以通过稍微修改函数来返回整个帖子,但这取决于您自己。

SO网友:Phill Healey

这已经有几年了,但在谷歌上搜索时仍然会弹出。所以,这里有一个简单的方法:

$page = get_page_by_title( \'my post title\' );

$page = get_post_ID_by_title(\'my post title\', OBJECT, \'customposttype\');
然后只需使用$page对象获取ID:

$page->ID

SO网友:Krzysztof Przygoda

目前(WP>4.9.2),您可以通过标题/段落找到您的“任意”给定帖子/页面等:

$page = get_posts(
    array(
        //\'name\'      => \'your-post-slug\', // by post slug
        \'title\'      => \'Your post title\', // by post title
        \'post_type\' => \'page\' // post type of your preference
    )
);

if ($page = $page[0]) // First/lowest ID taken if many objects
{
    // Then you do whatever is needed...
    // $id = $page->id;
    // $content = $page->post_content;
    // or $content = apply_filters(\'the_content\', $page->post_content);
    // etc.
}

结束

相关推荐

如何从wp_title()生成的标题中删除父分类名称?

我有一个自定义的分类法“公文包类别”,其中一些类别是“布”、“鞋”。。。打开某个类别页面时,我希望标题类似于“Site Name | Cloth”,但使用wp\\u title(),它将变成“Site Name | Portfolio Categories | Cloth”如何从标题中删除“投资组合类别”?