在发布之前检查元数据

时间:2016-03-23 作者:BigRedDog

我正在使用一个教堂主题和自定义贴子以及它自己的元数据集。

我想做的是,如果发布了一篇布道文章,WP将检查是否有人包含视频URL。如果有,请查看“视频布道”类别。如果他们不这样做,什么也不做。

我的问题是,只有当用户第二次单击Save时,此代码才起作用。我怀疑这是因为我的代码正在检查数据库中的数据。自从第一次有人发帖以来,数据还不在数据库中,“视频布道”类别未被检查。

有人能告诉我如何在元数据发布或写入数据库之前对其进行测试吗?

这是我的代码:

//Sermon post include Sermons category function add_sermons_automatically($post_ID) {
//check video

$video_info = get_post_meta(\'imic_vimeo_video\', $post_ID);
 $video_info .= get_post_meta(\'imic_mp4_video\', $post_ID);
 $video_info .= get_post_meta(\'imic_webm_video\', $post_ID);
 $video_info .= get_post_meta(\'imic_ogg_video\', $post_ID);
 $video_info .= get_post_meta(\'imic_youtube_video\', $post_ID);

if (!empty($video_info)) {
    $sermons_cat = array(28);
    wp_set_object_terms( $post_ID, $sermons_cat, \'sermon-category\');
}
} add_action(\'publish_sermon\', \'add_sermons_automatically\');
谢谢,克里夫

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

您需要检查$_POST 对于正在提交的相同数据,也可以使用字段(或者更好的字段)查找name 字段输入的属性-它可能与现有的键匹配。例如:。

function add_sermons_automatically($post_ID) {
    if ( ( (isset($_POST[\'imic_vimeo_video\'])) && ($_POST[\'imic_vimeo_video\'] != \'\') ) 
      || ( (isset($_POST[\'imic_mp4_video\'])) && ($_POST[\'imic_mp4_video\'] != \'\') ) 
      || ( (isset($_POST[\'imic_ogg_video\'])) && ($_POST[\'imic_ogg_video\'] != \'\') ) 
      || ( (isset($_POST[\'imic_webm_video\'])) && ($_POST[\'imic_webm_video\'] != \'\') 
      || ( (isset($_POST[\'imic_youtube_video\'])) && ($_POST[\'imic_youtube_video\'] != \'\') ) ) {
        // (see alternative below)
        $sermons_cat = array(28);
        wp_set_object_terms( $post_ID, $sermons_cat, \'sermon-category\');
    } else {
      // optionally remove the cateogory (see alternative below)
      // wp_set_object_terms( $post_ID, \'\', \'sermon-category\');
    }
}
如果以这种方式检查,而不是检查数据库,那么如果删除了所有视频值,也可以自动删除类别。

请注意,这样做将覆盖选中的任何其他类别,如果要分配多个类别,则需要执行以下操作wp_get_object_terms 首先,在(重新)设置类别之前,将其添加到该数组中。例如:。

$terms = wp_get_object_terms( $post_ID, \'sermon-category\');
$catids = array();
foreach ($terms as $term) {$catids[] = $term->term_id;}
$catids[] = \'28\'; // vido sermon category
wp_set_object_terms($post_ID, $catids, \'sermon-category\');
自动删除视频类别,同时保留其他类别类似:

$terms = wp_get_object_terms( $post_ID, \'sermon-category\');
$catids = array();
foreach ($terms as $term) {
    if ($term_id != 28) {$catids[] = $term->term_id;}
}
wp_set_object_terms($post_ID, $catids, \'sermon-category\');
最后,您应该在发布和更新(保存)上执行此操作。。。

add_action(\'publish_sermon\', \'add_sermons_automatically\');
add_action(\'save_sermon\', \'add_sermons_automatically\');

相关推荐

如何让`wp-list-table`显示我在Custom-Post中的`Custom-Fields`

一切都好吗<我需要wp-list-table 也要显示custom-fields 在每个custom-post 我有,但我不知道如何做到这一点,在这幅图中,它显示了带有字段的表格:Title, Author and Publication Date: 我想要的是能够选择custom-fields 将出现,例如以下示例Title, Carta, Naipe, Author, and Date of Publication: