基于自定义字段的标题和帖子URL?

时间:2014-05-11 作者:polish bastard

我的自定义帖子类型中有自定义字段。它们应该作为URL的标题和贴子。基本上,每当我更改自定义字段的内容时,标题字段都应该做出相应的反应。E、 g.如果字段名包含“John”和姓氏“Smith”,则标题应转换为“John Smith”。

该网站的用户将没有经验,所以他们不会理解需要写姓名和姓氏以及单独的标题,这就是为什么我需要它。

我知道我可以在模板中显示自定义字段内容而不是标题,但这不一样。我还需要对permalink进行相应的修改。

因此,为了重述我的输入:custom field NAME=Johncustom field NAME=smith应该发生什么:post title=John Smithpermalink=John smith(我假设它将像通常一样处理从自定义字段提取的标题)

我希望现在一切都清楚了。谢谢你的建议。

3 个回复
SO网友:cybmeta

我认为做你想做的事的一个好方法是wp_insert_post_data 滤器在保存到数据库之前,您可以在此处更改文章的标题和段落:

add_filter( \'wp_insert_post_data\', \'wpse_update_post_title_and_slug\' );
function wpse_update_post_title_and_slug( $data ) {

    //You can make some checks here before modify the post data.
    //For example, limit the changes to standard post type
    if( \'post\' == $data[\'post_type\'] ) {

        //Add post meta to post title
        $data[\'post_title\'] = $_POST[\'the-name-field\'] . \' \' . $_POST[\'the-surname-field\'];

        //Update the slug of the post for the URL
        $data[\'post_name\'] = sanitize_title( $data[\'post_title\'] );

    }

    return $data;

}

SO网友:Tom J Nowell

还有一种选择,根本不要设置标题。相反,过滤它。

这里是the_title 如法典所示的过滤器:

function suppress_if_blurb($title, $id) {
    if (in_category(\'blurb\', $id)) {
        return \'\';
    }
    return $title;
}
add_filter(\'the_title\', \'suppress_if_blurb\', 10, 2);
如果我们这样做:

function wpse144041_modify_title($title, $id) {
    if ( get_post_type( $id ) == \'yourposttype\' ) {
        $first = get_post_meta( $id, \'first\', true );
        $last = get_post_meta( $id, \'last\', true );
        $title = $first.\' \'.$last;
    }
    return $title;
}
add_filter(\'the_title\', \'wpse144041_modify_title\', 10, 2);
那么标题字段现在就不相关了,它将在文章类型的前端显示名字和姓氏作为标题。调整相关字段和帖子类型名称以匹配

SO网友:polish bastard

恐怕上面的代码根本不起作用。我这样修改它:

add_filter( \'wp_insert_post_data\', \'wpse_update_post_title_and_slug\' );
function wpse_update_post_title_and_slug( $data , $postarr ) {

    //You can make some checks here before modify the post data.
    //For example, limit the changes to standard post type
    if( \'people\' == $data[\'post_type\'] ) {

        //Add post meta to post title
        $data[\'post_title\'] = $_POST[\'first_name\'] . \' \' . $_POST[\'last_name\'];

        //Update the slug of the post for the URL
        $data[\'post_name\'] = sanitize_title( $data[\'post_title\'] );

    }

    return $data;

}
尽管存在特定的自定义字段并具有内容,但标题和slug都不会更改。

我想在保住职位后,两者都会被“强行”修改?或者可能不是那样的?

我还尝试这样重新编码:

function wpse_update_post_title_and_slug( $data , $postarr ) {

if( $data[\'post_type\'] == \'people\' ) {
// get post data
$id = $postarr[\'ID\'];
$first_name = get_post_meta( $id, \'first_name\', true );
$last_name = get_post_meta( $id, \'last_name\', true );
// insert the data into the title and the slug
$data[\'post_title\'] = $first_name . \' \' . $last_name;
$data[\'post_name\'] = sanitize_title( $data[\'post_title\'] );
    }

    return $data;

}
add_filter( \'wp_insert_post_data\', \'wpse_update_post_title_and_slug\' );
但都是一样的。没有反应,没有错误,什么都没有。因为它完全没有功能。php。它正常工作。

结束

相关推荐

更改wp_title()的输出

我使用wp\\u title生成某种面包屑,效果很好,但在那里我有网站的标题,我想删除它。看起来是这样的:分类1:城市|站点名称。我通过使用<?php wp_title(); ?>.如何删除该输出中的站点标题?