基于元数据自动生成自定义帖子标题

时间:2011-08-22 作者:Jeremy

我正在使用自定义帖子类型创建自定义的“产品评论”类型。我正在自定义UI,使其具有“审阅者”、“产品”及其“审阅”字段。这并不需要一个帖子标题,所以我删除了这个字段。

这一切都很好,但当我查看所有产品展示时,标题完全没有帮助(自动草稿、自动草稿2等)。我想做的是自动将帖子标题设置为审阅者姓名和他们审阅的产品的组合;类似于“约翰·史密斯,汽车收音机”的东西。

我有一个钩住save\\u post操作的函数,可以更新我设置的自定义元字段。我想我需要在这里添加一些东西来完成我试图做的事情,但我不确定这需要什么功能或过程。

提前感谢!

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

杰里米,

出色的工作不仅仅是让它处于“自动拔模”状态。当这些类型的CPT没有标题时,这很棘手。下面是我用来完成类似任务的一些代码。

你需要根据自己的情况进行调整,但它为你展示了一种方法。特别是,您可以使用wp_insert_post_data 筛选以在将标题添加到数据库之前更改标题。现在,你可能犯的最大错误之一就是过滤所有的帖子标题。如果您不小心测试正确的上下文(例如,当您保存和/或编辑“product review”CPT时,您会发现站点中的所有标题都被破坏了。我的建议是使用元框中的nonce字段来检测何时提交了正确的表单。

这是我的代码:

add_filter(\'wp_insert_post_data\', \'change_title\', 99, 2);

function change_title($data, $postarr)
{    
    // If it is our form has not been submitted, so we dont want to do anything
    if(defined(\'DOING_AUTOSAVE\') && DOING_AUTOSAVE) return;

    // Verify this came from the our screen and with proper authorization because save_post can be triggered at other times
    if(!isset($_POST[\'my_nonce_field\'])) return;

    // If nonce is set, verify it
    if(isset($_POST[\'my_nonce_field\']) && !wp_verify_nonce($_POST[\'my_nonce_field\'], plugins_url(__FILE__))) return;

    // Get the associated term name
    foreach($_POST[\'tax_input\'][\'complaint-type\'] as $term) {$term_id = $term;}

    // Get name of term
    $term = get_term_by(\'id\', $term_id, \'complaint-type\');

    // Combine address with term
    $title = $_POST[\'address\'][\'address1\'].\' (\'.$term->name.\')\';
    $data[\'post_title\'] = $title;

    return $data;
}
不要被我对标题的操控所困扰。只要意识到你需要$data[\'post_title\'] 和返回$data.

结束

相关推荐