在提交表单时使用wp_UPDATE_POST根据$变量的值更改术语

时间:2019-09-08 作者:MFWebMaster

Background

<我使用一个前置表单,通过使用带有自定义分类法(调用类型)的wp\\u update\\u post to a custom post type(call),向元框提交数据

//update post
    $post_id = wp_update_post($post_information);
    if($post_id)
    {
        // Update Custom Meta
        update_post_meta($post_id, \'_call_16\', $_POST[\'call_16\']);
        update_post_meta($post_id, \'_call_17\', $_POST[\'call_17\']);
        update_post_meta($post_id, \'_call_18\', $_POST[\'call_18\']);
        update_post_meta($post_id, \'_call_19\', $_POST[\'call_19\']);
        // Update Custom Meta
        update_post_meta($post_id, \'_call_20\', $_POST[\'call_20\']);
        // Update call "terms" or taxonomy
        $term_ids = array( 3, 14 );
        $taxonomy = \'call-type\';
        wp_set_object_terms( $post_id, $term_ids, $taxonomy );
        // Redirect
        wp_redirect( \'$url\' );

}
?> 
Html来自

...
<div class="form-group">
 <label class="w-25" for="call_16">Is site Visit Required</label>
  <select class="w-50 px-1 py-1" name="call_16">Site Visit </p>
   <option value=""></option>
   <option value="Yes">Yes</option>
   <option value="No">No</option>
  </select>
</div>
...

The Problem

我希望代码根据提交条目的值更新术语。

The desired result is.

  • 如果$\\u POST[\'call\\u 16\']=No 将术语更改为18.
  • 如果$\\u POST[\'call\\u 16\']=Yes 将术语更改为14.

The code I have try

//update post
    $post_id = wp_update_post($post_information);
    if($post_id)
    {
        // Update Custom Meta
        update_post_meta($post_id, \'_call_16\', $_POST[\'call_16\']);
        update_post_meta($post_id, \'_call_17\', $_POST[\'call_17\']);
        update_post_meta($post_id, \'_call_18\', $_POST[\'call_18\']);
        update_post_meta($post_id, \'_call_19\', $_POST[\'call_19\']);
        // Update call terms or taxonomy
        if (isset($_POST[\'call_16\']) == \'No\' ) {
            $term_ids = array( 3, 18 );
            $taxonomy = \'call-type\';
            wp_set_object_terms( $post_id, $term_ids, $taxonomy );
            // Redirect
            wp_redirect( \'$url2\' );
        }
        else {
            $term_ids = array( 3, 14 );
            $taxonomy = \'call-type\';
            wp_set_object_terms( $post_id, $term_ids, $taxonomy );
            // Redirect
            wp_redirect( \'$url\' );
        }
    }
?>
如果可能的话,请有人提出建议,并详细说明如何做到这一点。

1 个回复
SO网友:Jacob Peattie

您的问题是这一行:

if (isset($_POST[\'call_16\']) == \'No\' ) {
isset() 退货truefalse 基于\'call_16\' 项目存在于$_POST 大堆它不返回值。所以isset($_POST[\'call_16\'])true, 不\'No\'. 如果要检查它是否已设置,并且它是否具有特定值(您应该这样做),则需要分别检查它们:

if (isset( $_POST[\'call_16\'] ) && \'No\' === $_POST[\'call_16\'] ) {
虽然,应该说您已经使用$_POST[\'call_16\'] 更早,因此检查是否需要更早进行,然后只检查此特定条件的值。

相关推荐

按字母顺序对填充的GravityForms列表进行排序

希望有人能帮助一个新手,因为我不知道该怎么做。我的函数中有以下代码。填充GravityForms表单产品“复选框列表”的php。用户使用复选框在网站上选择GF表单中的产品。每个拉入复选框列表的产品都是一个单独的WordPress帖子。我很难按字母顺序对复选框进行排序,以便用户可以在100多个不同的产品(帖子)中轻松找到产品。我找不到任何其他看起来有点相似的论坛帖子,所以我可以自己解决如何排序。第一部分是按字母顺序对复选框进行排序,我需要的第二部分是排除两个标记为“系统”的帖子,或者排除这两个帖子,因为它们