通过元数据设置帖子标题返回自动草稿

时间:2014-05-06 作者:JohnG

我在这里和其他地方读过关于基于元数据设置帖子标题的内容。不幸的是,我无法让它工作,我希望其他人能给我指出正确的方向或解释我错在哪里。这是我的代码:

function setup_match_title( $data, $postarr ) {
    if ( $data[\'post_type\'] == \'matches\' && $data[\'post_title\'] == \'\' ) :

        $a = get_the_title( get_post_meta( $postarr[\'ID\'], \'away_name\', true ) );
        $h = get_the_title( get_post_meta( $postarr[\'ID\'], \'home_name\', true ) );

        $data[\'post_title\'] = $a . \' vs \' . $h;

    endif;

    return $data;
}

add_filter( \'wp_insert_post_data\', \'setup_match_title\', 99, 2 );
主队和客队元框是选择框,其中填充有存储球队post\\U id的“团队”post\\U类型列表

当我发布一个新的“匹配”时,我的帖子标题是“自动草稿vs自动草稿”。我猜是因为数据库中没有任何内容get_post_meta() 运行时,它将返回自动拔模。我相信,因为如果我回到帖子中,清空标题(因此它会传递最初的if语句)并更新它,就会设置正确的标题。

我做错了什么?是否有任何方法可以在运行时使用get_post_meta()?

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

不管什么原因get_post_meta() 在内部运行时不工作wp_insert_post_data() 滤器但是,在执行var_dump( $postarr ) 我看到元键被预期值填充。

我只是更换了get_post_meta() 具有以下功能的功能线:

$a = isset( $postarr[\'away_name\'] ) ? get_the_title( $postarr[\'away_name\'] ) : \'\';
$h = isset( $postarr[\'home_name\'] ) ? get_the_title( $postarr[\'home_name\'] ) : \'\';

SO网友:s_ha_dum

一旦你点击“添加新内容”,新的帖子页面开始加载,WordPress就会在数据库中插入一个基本空白的帖子模板。之后会定期自动保存。你也不想要。您需要添加其他条件,以防止代码在这些情况下运行。除了你的$data[\'post_type\'] == \'matches\' && $data[\'post_title\'] == \'\':

if (
  (defined(\'DOING_AUTOSAVE\') && DOING_AUTOSAVE) 
  || (defined(\'DOING_AJAX\') && DOING_AJAX)
  || ($p->post_status === \'auto-draft\')
) {
就我个人而言,我认为你最好换一个更专业的钩子,比如publish_post 或apost status transition

结束

相关推荐

列出分类法:如果分类法没有POST,就不要列出分类法--取决于定制的POST-META?

这可能很难解释,我不知道是否有解决办法!?我有一个名为“wr\\u event”的自定义帖子类型和一个名为“event\\u type”的分层自定义分类法。自定义帖子类型有一个元框,用于event_date 并且与此帖子类型关联的所有帖子都按以下方式排序event_date. 我在循环中有一个特殊的条件来查询event_date 已经发生了-在这种情况下,它没有显示,但只列在我的档案中。就像你可以使用wp_list_categories() 我编写了一个自定义函数,它以完全相同的方式列出所有分类术语。现在