Пример #1
0
 static function generate($depth = False)
 {
     # Get current Filter string
     $filter = RawUrlDecode(Get_Query_Var('filter'));
     if (!empty($filter)) {
         $str_filter = $filter;
     } elseif (Is_Singular()) {
         $str_filter = StrToLower(Get_The_Title());
     } else {
         $str_filter = '';
     }
     # Explode Filter string
     $arr_current_filter = empty($str_filter) ? array() : PReg_Split('/(?<!^)(?!$)/u', $str_filter);
     Array_UnShift($arr_current_filter, '');
     $arr_filter = array();
     # This will be the function result
     $filter_part = '';
     # Check if we are inside a taxonomy archive
     $taxonomy_term = Is_Tax() ? Get_Queried_Object() : Null;
     foreach ($arr_current_filter as $filter_letter) {
         $filter_part .= $filter_letter;
         $arr_available_filters = self::getFilters($filter_part, $taxonomy_term);
         if (Count($arr_available_filters) <= 1) {
             break;
         }
         $active_filter_part = MB_SubStr(Implode($arr_current_filter), 0, MB_StrLen($filter_part) + 1);
         $arr_filter_line = array();
         foreach ($arr_available_filters as $available_filter) {
             $arr_filter_line[$available_filter] = (object) array('filter' => MB_StrToUpper(MB_SubStr($available_filter, 0, 1)) . MB_SubStr($available_filter, 1), 'link' => Post_Type::getArchiveLink($available_filter, $taxonomy_term), 'active' => $active_filter_part == $available_filter, 'disabled' => False);
         }
         $arr_filter[] = $arr_filter_line;
         # Check filter depth limit
         if ($depth && Count($arr_filter) >= $depth) {
             break;
         }
     }
     # Run a filter
     $arr_filter = Apply_Filters('glossary_prefix_filter_links', $arr_filter, $depth);
     return $arr_filter;
 }
Пример #2
0
        # Add optionally post type support
        if (Options::Get('enable_custom_fields')) {
            Add_Post_Type_Support(self::$post_type_name, 'custom-fields');
        }
    }
    static function addMetaBoxes()
    {
        # There will be added no other meta boxes yet
    }
    static function filterUpdatedMessages($arr_message)
    {
        return Array_Merge($arr_message, array(self::$post_type_name => array(1 => SPrintF(I18n::t('Term updated. (<a href="%s">View Term</a>)'), Get_Permalink()), 2 => __('Custom field updated.'), 3 => __('Custom field deleted.'), 4 => I18n::t('Term updated.'), 5 => isset($_GET['revision']) ? SPrintF(I18n::t('Term restored to revision from %s'), WP_Post_Revision_Title((int) $_GET['revision'], False)) : False, 6 => SPrintF(I18n::t('Term published. (<a href="%s">View Term</a>)'), Get_Permalink()), 7 => I18n::t('Term saved.'), 8 => I18n::t('Term submitted.'), 9 => SPrintF(I18n::t('Term scheduled. (<a target="_blank" href="%s">View Term</a>)'), Get_Permalink()), 10 => SPrintF(I18n::t('Draft updated. (<a target="_blank" href="%s">Preview Term</a>)'), Add_Query_Arg('preview', 'true', Get_Permalink())))));
    }
    static function getArchiveLink($filter = '', $taxonomy_term = Null)
    {
        $permalink_structure = Get_Option('permalink_structure');
        # Get base url
        if ($taxonomy_term) {
            $base_url = Get_Term_Link($taxonomy_term);
        } else {
            $base_url = Get_Post_Type_Archive_Link(self::$post_type_name);
        }
        if (!empty($permalink_structure)) {
            return User_TrailingSlashIt(SPrintF('%1$s/filter:%2$s', RTrim($base_url, '/'), RawURLEncode($filter)));
        } else {
            return Add_Query_Arg(array('filter' => RawURLEncode($filter)), $base_url);
        }
    }
}
Post_Type::Init();
 /**
  * Prepare a single post output for response.
  *
  * @param \WP_Post         $post    Post object.
  * @param \WP_REST_Request $request Request object.
  * @return \WP_REST_Response $response Response.
  */
 public function prepare_item_for_response($post, $request)
 {
     $response = parent::prepare_item_for_response($post, $request);
     $response->data['content'] = $this->snapshot_post_type->get_post_content($post);
     return $response;
 }
 /**
  * Publish snapshot changes when snapshot post is being published.
  *
  * The logic in here is the inverse of to publish_snapshot_with_customize_save_after.
  *
  * The meat of the logic that manipulates the post_content and validates the settings
  * needs to be done in wp_insert_post_data filter in like a
  * filter_insert_post_data_to_validate_published_snapshot method? This would
  * have the benefit of reducing one wp_insert_post() call.
  *
  * @todo Consider using wp_insert_post_data to prevent double calls to wp_insert_post().
  * @see Customize_Snapshot_Manager::publish_snapshot_with_customize_save_after()
  *
  * @param string   $new_status New status.
  * @param string   $old_status Old status.
  * @param \WP_Post $post       Post object.
  * @return bool Whether the settings were saved.
  */
 public function save_settings_with_publish_snapshot($new_status, $old_status, $post)
 {
     // Abort if not transitioning a snapshot post to publish from a non-publish status.
     if (Post_Type::SLUG !== $post->post_type || 'publish' !== $new_status || $new_status === $old_status) {
         return false;
     }
     $this->ensure_customize_manager();
     if ($this->doing_customize_save_ajax()) {
         // Short circuit because customize_save ajax call is changing status.
         return false;
     }
     if (!did_action('customize_register')) {
         /*
          * When running from CLI or Cron, we have to remove the action because
          * it will get added with a default priority of 10, after themes and plugins
          * have already done add_action( 'customize_register' ), resulting in them
          * being called first at the priority 10. So we manually call the
          * prerequisite function WP_Customize_Manager::register_controls() and
          * remove it from being called when the customize_register action fires.
          */
         remove_action('customize_register', array($this->customize_manager, 'register_controls'));
         $this->customize_manager->register_controls();
         /*
          * Unfortunate hack to prevent \WP_Customize_Widgets::customize_register()
          * from calling preview() on settings. This needs to be cleaned up in core.
          * It is important for previewing to be prevented because if an option has
          * a filter it will short-circuit when an update is attempted since it
          * detects that there is no change to be put into the DB.
          * See: https://github.com/xwp/wordpress-develop/blob/e8c58c47db1421a1d0b2afa9ad4b9eb9e1e338e0/src/wp-includes/class-wp-customize-widgets.php#L208-L217
          */
         if (!defined('DOING_AJAX')) {
             define('DOING_AJAX', true);
         }
         $_REQUEST['action'] = 'customize_save';
         /** This action is documented in wp-includes/class-wp-customize-manager.php */
         do_action('customize_register', $this->customize_manager);
         // undefine( 'DOING_AJAX' )... just kidding. This is the end of the unfortunate hack and it should be fixed in Core.
         unset($_REQUEST['action']);
     }
     $snapshot_content = $this->post_type->get_post_content($post);
     if (method_exists($this->customize_manager, 'validate_setting_values')) {
         /** This action is documented in wp-includes/class-wp-customize-manager.php */
         do_action('customize_save_validation_before', $this->customize_manager);
     }
     $setting_ids = array_keys($snapshot_content);
     $this->customize_manager->add_dynamic_settings($setting_ids);
     /** This action is documented in wp-includes/class-wp-customize-manager.php */
     do_action('customize_save', $this->customize_manager);
     /**
      * Settings to save.
      *
      * @var \WP_Customize_Setting[]
      */
     $settings = array();
     $publish_error_count = 0;
     foreach ($snapshot_content as $setting_id => &$setting_params) {
         // Missing value error.
         if (!isset($setting_params['value']) || is_null($setting_params['value'])) {
             if (!is_array($setting_params)) {
                 if (!empty($setting_params)) {
                     $setting_params = array('value' => $setting_params);
                 } else {
                     $setting_params = array();
                 }
             }
             $setting_params['publish_error'] = 'null_value';
             $publish_error_count += 1;
             continue;
         }
         // Unrecognized setting error.
         $this->customize_manager->set_post_value($setting_id, $setting_params['value']);
         $setting = $this->customize_manager->get_setting($setting_id);
         if (!$setting instanceof \WP_Customize_Setting) {
             $setting_params['publish_error'] = 'unrecognized_setting';
             $publish_error_count += 1;
             continue;
         }
         // Validate setting value.
         if (method_exists($setting, 'validate')) {
             $validity = $setting->validate($setting_params['value']);
             if (is_wp_error($validity)) {
                 $setting_params['publish_error'] = $validity->get_error_code();
                 $publish_error_count += 1;
                 continue;
             }
         }
         // Validate sanitized setting value.
         $sanitized_value = $setting->sanitize($setting_params['value']);
         if (is_null($sanitized_value) || is_wp_error($sanitized_value)) {
             $setting_params['publish_error'] = is_wp_error($sanitized_value) ? $sanitized_value->get_error_code() : 'invalid_value';
             $publish_error_count += 1;
             continue;
         }
         $settings[] = $setting;
         unset($setting_params['publish_error']);
     }
     // Handle error scenarios.
     if ($publish_error_count > 0) {
         $update_setting_args = array('ID' => $post->ID, 'post_content' => Customize_Snapshot_Manager::encode_json($snapshot_content), 'post_status' => 'pending');
         wp_update_post(wp_slash($update_setting_args));
         update_post_meta($post->ID, 'snapshot_error_on_publish', $publish_error_count);
         add_filter('redirect_post_location', function ($location) {
             $location = add_query_arg('snapshot_error_on_publish', '1', $location);
             return $location;
         });
         return false;
     }
     /*
      * Change all setting capabilities temporarily to 'exist' to allow them to
      * be saved regardless of current user, such as when WP-Cron is publishing
      * the snapshot post if it was scheduled. It is safe to do this because
      * a setting can only be written into a snapshot by users who have the
      * capability, so after it has been added to a snapshot it is good to commit.
      */
     $existing_caps = wp_list_pluck($settings, 'capability');
     foreach ($settings as $setting) {
         $setting->capability = 'exist';
     }
     // Persist the settings in the DB.
     foreach ($settings as $setting) {
         $setting->save();
     }
     // Restore setting capabilities.
     foreach ($existing_caps as $setting_id => $existing_cap) {
         $settings[$setting_id]->capability = $existing_cap;
     }
     /** This action is documented in wp-includes/class-wp-customize-manager.php */
     do_action('customize_save_after', $this->customize_manager);
     // Remove any previous error on setting.
     delete_post_meta($post->ID, 'snapshot_error_on_publish');
     return true;
 }
 /**
  * Tests hide_disabled_publishing_actions.
  *
  * @covers CustomizeSnapshots\Post_Type::hide_disabled_publishing_actions()
  */
 public function test_hide_disabled_publishing_actions()
 {
     $post_type = new Post_Type($this->plugin->customize_snapshot_manager);
     $post_id = $post_type->save(array('uuid' => self::UUID, 'data' => array()));
     ob_start();
     $post_type->hide_disabled_publishing_actions(get_post($post_id));
     $output = ob_get_clean();
     $this->assertEmpty($output);
     $post_type->save(array('uuid' => self::UUID, 'status' => 'publish'));
     ob_start();
     $post_type->hide_disabled_publishing_actions(get_post($post_id));
     $output = ob_get_clean();
     $this->assertNotEmpty($output);
     $this->assertContains('misc-pub-post-status', $output);
 }