Example #1
0
 /**
  * 默认的自动补全逻辑
  *
  * @param $keyword
  * @return array
  */
 private function defaultMatch($keyword)
 {
     if (is_empty_string($keyword)) {
         return [];
     }
     if (!($related = $this->related())) {
         return [];
     }
     return $related->where($this->relationColumn(), 'like', '%' . trim($keyword) . '%')->limit($this->getLimit())->pluck($this->relationColumn(), $related->getKeyName())->all();
 }
/**
 * Update the additional meta for a post ID.
 *
 * @since 1.1
 * @param int     $post_id  Post ID
 * @param [type]  $new_meta New additional meta to update
 * @return void
 */
function update_additional_meta($post_id, $new_meta)
{
    $old_meta = get_post_meta($post_id, '_ac_additional_content', true);
    if (!(!empty($new_meta) && is_array($new_meta))) {
        if ($old_meta) {
            // Delete old meta if new meta is empty.
            delete_post_meta($post_id, '_ac_additional_content');
        }
        return;
    }
    $defaults = get_defaults();
    // Validate the new settings
    foreach ($new_meta as $key => $setting) {
        if (!is_array($setting)) {
            unset($new_meta[$key]);
            continue;
        }
        $setting = array_merge($defaults, $setting);
        // Filter content for users without the unfiltered_html capability.
        $filter_content = current_user_can('unfiltered_html') ? false : true;
        /**
         * Filter html in additional content before it is saved to the database. 
         *
         * @since 1.0
         * @param bool    $filter_content Filter content. True for users without the unfiltered_html capability.
         */
        $filter_content = apply_filters('ac_additional_content_filter_html', $filter_content, $setting, $post_id);
        if ($filter_content) {
            $setting['additional_content'] = wp_filter_post_kses($setting['additional_content']);
        }
        if (is_empty_string($setting['additional_content'])) {
            unset($new_meta[$key]);
            continue;
        }
        foreach (array('prepend', 'append') as $addition) {
            if ('on' !== $setting[$addition]) {
                $setting[$addition] = $defaults[$addition];
            }
        }
        $setting['priority'] = absint($setting['priority']) ? absint($setting['priority']) : 10;
        $new_meta[$key] = $setting;
    }
    $new_meta = array_values($new_meta);
    if (!empty($new_meta)) {
        $_new_meta = array();
        $priorities = sort_by_priority($new_meta);
        foreach ($priorities as $priority) {
            foreach ($priority as $option) {
                $_new_meta[] = $option;
            }
        }
        if ($_new_meta != $old_meta) {
            update_post_meta($post_id, '_ac_additional_content', $_new_meta);
        }
    } elseif (empty($new_meta) && $old_meta) {
        delete_post_meta($post_id, '_ac_additional_content');
    }
}
Example #3
0
 /**
  * 当前属性以特定字符串结尾
  * @param $attribute
  * @param string|null $value
  * @return static
  */
 public function whereEndsWith($attribute, string $value)
 {
     if (is_empty_string($value)) {
         return $this;
     }
     $this->original->where($attribute, 'like', '%' . trim($value, '%'));
     return $this;
 }
 /**
  * Returns validated additional content options.
  *
  * @since 1.0
  * @param array   $options Additional content options.
  * @return array  Sanitized options.
  */
 private function validate_options($options = array())
 {
     $sanitized_options = array();
     $defaults = get_defaults();
     // Sanitize and validate the options.
     foreach ($options as $option) {
         if (!is_array($option)) {
             continue;
         }
         $option = array_merge($defaults, $option);
         // Continue if both prepend and append are empty.
         if (empty($option['prepend']) && empty($option['append'])) {
             continue;
         }
         // Continue if additional_content is empty.
         if (is_empty_string($option['additional_content'])) {
             continue;
         }
         // Use the same filters as the filters applied to the_content.
         // This prevents filter recursion.
         $option['additional_content'] = apply_filters('the_additional_content', $option['additional_content']);
         // Add the option after validation.
         $sanitized_options[] = $option;
     }
     return $sanitized_options;
 }