Overview

Classes

  • Papi_Admin
  • Papi_Admin_Ajax
  • Papi_Admin_Assets
  • Papi_Admin_Management_Pages
  • Papi_Admin_Menu
  • Papi_Admin_Meta_Box
  • Papi_Admin_Meta_Box_Tabs
  • Papi_Admin_Option_Handler
  • Papi_Admin_Post_Handler
  • Papi_Admin_View
  • Papi_Attachment_Type
  • Papi_Conditional_Rules
  • Papi_Container
  • Papi_Core_Autoload
  • Papi_Core_Conditional
  • Papi_Core_Conditional_Rule
  • Papi_Core_Data_Handler
  • Papi_Core_Page
  • Papi_Core_Property
  • Papi_Core_Type
  • Papi_Loader
  • Papi_Option_Page
  • Papi_Option_Type
  • Papi_Page_Type
  • Papi_Page_Type_Meta
  • Papi_Porter
  • Papi_Porter_Driver
  • Papi_Porter_Driver_Core
  • Papi_Post_Page
  • Papi_Property
  • Papi_Property_Bool
  • Papi_Property_Checkbox
  • Papi_Property_Color
  • Papi_Property_Datetime
  • Papi_Property_Divider
  • Papi_Property_Dropdown
  • Papi_Property_Editor
  • Papi_Property_Email
  • Papi_Property_File
  • Papi_Property_Flexible
  • Papi_Property_Gallery
  • Papi_Property_Hidden
  • Papi_Property_Html
  • Papi_Property_Image
  • Papi_Property_Link
  • Papi_Property_Number
  • Papi_Property_Post
  • Papi_Property_Radio
  • Papi_Property_Reference
  • Papi_Property_Relationship
  • Papi_Property_Repeater
  • Papi_Property_String
  • Papi_Property_Term
  • Papi_Property_Text
  • Papi_Property_Url
  • Papi_Property_User

Functions

  • current_page
  • papi
  • papi_action_delete_value
  • papi_action_include
  • papi_append_post_type_query
  • papi_body_class
  • papi_cache_delete
  • papi_cache_get
  • papi_cache_key
  • papi_cache_set
  • papi_camel_case
  • papi_cast_string_value
  • papi_convert_to_string
  • papi_current_user_is_allowed
  • papi_dashify
  • papi_delete_field
  • papi_delete_option
  • papi_delete_property_meta_value
  • papi_display_page_type
  • papi_doing_ajax
  • papi_esc_html
  • papi_f
  • papi_field
  • papi_field_shortcode
  • papi_field_value
  • papi_fields
  • papi_filter_conditional_rule_allowed
  • papi_filter_core_load_one_type_on
  • papi_filter_format_value
  • papi_filter_load_value
  • papi_filter_settings_directories
  • papi_filter_settings_only_page_type
  • papi_filter_settings_page_type_column_title
  • papi_filter_settings_show_page_type
  • papi_filter_settings_show_standard_page_type
  • papi_filter_settings_show_standard_page_type_in_filter
  • papi_filter_settings_sort_order
  • papi_filter_settings_standard_page_description
  • papi_filter_settings_standard_page_name
  • papi_filter_settings_standard_page_thumbnail
  • papi_filter_update_value
  • papi_from_property_array_slugs
  • papi_get_all_files_in_directory
  • papi_get_all_page_type_files
  • papi_get_all_page_types
  • papi_get_box_property
  • papi_get_class_name
  • papi_get_field
  • papi_get_file_path
  • papi_get_number_of_pages
  • papi_get_only_objects
  • papi_get_option
  • papi_get_options_and_properties
  • papi_get_or_post
  • papi_get_page
  • papi_get_page_new_url
  • papi_get_page_query_strings
  • papi_get_page_type
  • papi_get_page_type_base_path
  • papi_get_page_type_by_id
  • papi_get_page_type_by_post_id
  • papi_get_page_type_id
  • papi_get_page_type_key
  • papi_get_page_type_meta_value
  • papi_get_page_type_name
  • papi_get_page_type_template
  • papi_get_parent_post_id
  • papi_get_post_id
  • papi_get_post_type
  • papi_get_post_type_label
  • papi_get_post_types
  • papi_get_property_class_name
  • papi_get_property_meta_value
  • papi_get_property_options
  • papi_get_property_type
  • papi_get_property_type_key
  • papi_get_property_type_key_f
  • papi_get_qs
  • papi_get_sanitized_post
  • papi_get_slugs
  • papi_get_tab_options
  • papi_html_name
  • papi_html_tag
  • papi_include_template
  • papi_is_empty
  • papi_is_json
  • papi_is_method
  • papi_is_option_page
  • papi_is_option_type
  • papi_is_page_type
  • papi_is_property
  • papi_is_property_type_key
  • papi_is_rule
  • papi_management_page_type_render_box
  • papi_maybe_convert_to_array
  • papi_maybe_convert_to_object
  • papi_maybe_get_callable_value
  • papi_maybe_json_decode
  • papi_maybe_json_encode
  • papi_nl2br
  • papi_option_shortcode
  • papi_option_type_exists
  • papi_page_type_exists
  • papi_populate_properties
  • papi_property
  • papi_remove_papi
  • papi_remove_trailing_quotes
  • papi_render_html_tag
  • papi_render_properties
  • papi_render_property
  • papi_require_text
  • papi_required_html
  • papi_rule
  • papi_santize_data
  • papi_set_page_type_id
  • papi_setup_tabs
  • papi_slugify
  • papi_sort_order
  • papi_tab
  • papi_template
  • papi_template_include
  • papi_to_array
  • papi_to_property_array_slugs
  • papi_translate_keys
  • papi_underscorify
  • papi_update_field
  • papi_update_option
  • papi_update_property_meta_value
  • papi_with
  • papify
  • the_papi_field
  • the_papi_option
  • the_papi_page_type_name
  • Overview
  • Class
  1: <?php
  2: 
  3: /**
  4:  * WordPress link manager property.
  5:  */
  6: class Papi_Property_Link extends Papi_Property {
  7: 
  8:     /**
  9:      * The convert type.
 10:      *
 11:      * @var string
 12:      */
 13:     public $convert_type = 'object';
 14: 
 15:     /**
 16:      * The default value.
 17:      *
 18:      * @var array
 19:      */
 20:     public $default_value = [];
 21: 
 22:     /**
 23:      * Delete value from the database.
 24:      *
 25:      * @param  string $slug
 26:      * @param  int    $post_id
 27:      * @param  string $type
 28:      *
 29:      * @return bool
 30:      */
 31:     public function delete_value( $slug, $post_id, $type ) {
 32:         $values = $this->load_value( null, $slug, $post_id );
 33:         $result = true;
 34: 
 35:         foreach ( $values as $key => $val ) {
 36:             $out    = papi_delete_property_meta_value( $post_id, $slug . '_' . $key );
 37:             $result = $out ? $result : $out;
 38:         }
 39: 
 40:         if ( $result ) {
 41:             $result = papi_delete_property_meta_value( $post_id, $slug );
 42:         }
 43: 
 44:         return $result;
 45:     }
 46: 
 47:     /**
 48:      * Format the value of the property before it's returned
 49:      * to WordPress admin or the site.
 50:      *
 51:      * @param  mixed  $value
 52:      * @param  string $slug
 53:      * @param  int    $post_id
 54:      *
 55:      * @return mixed
 56:      */
 57:     public function format_value( $value, $slug, $post_id ) {
 58:         return $this->load_value( $value, $slug, $post_id );
 59:     }
 60: 
 61:     /**
 62:      * Get default settings.
 63:      *
 64:      * @return array
 65:      */
 66:     public function get_default_settings() {
 67:         return [];
 68:     }
 69: 
 70:     /**
 71:      * Load value from database.
 72:      *
 73:      * @param  mixed  $value
 74:      * @param  string $slug
 75:      * @param  int    $post_id
 76:      *
 77:      * @return array
 78:      */
 79:     public function load_value( $value, $slug, $post_id ) {
 80:         $values = [
 81:             'post_id',
 82:             'url',
 83:             'title',
 84:             'target'
 85:         ];
 86: 
 87:         if ( is_array( $value ) || is_object( $value ) ) {
 88:             $values = (array) $value;
 89: 
 90:             foreach ( $values as $key => $val ) {
 91:                 unset( $values[$key] );
 92:                 $key = preg_replace( '/^' . $slug . '\_/', '', $key );
 93:                 $values[$key] = $val;
 94:             }
 95:         } else {
 96:             foreach ( $values as $index => $key ) {
 97:                 $values[$key] = get_post_meta(
 98:                     $post_id,
 99:                     sprintf( '%s_%s', $slug, $key ),
100:                     true
101:                 );
102:                 unset( $values[$index] );
103:             }
104:         }
105: 
106:         $values = (object) $values;
107: 
108:         if ( isset( $values->$slug ) && is_numeric( $values->$slug ) ) {
109:             unset( $values->$slug );
110:         }
111: 
112:         return $this->prepare_link_array( $values );
113:     }
114: 
115:     /**
116:      * Render property html.
117:      */
118:     public function html() {
119:         $value = $this->get_value();
120:         $value = is_array( $value ) || is_object( $value ) ? $value : [];
121:         $value = (object) $value;
122:         ?>
123: 
124:         <div class="papi-property-link" data-replace-slug="true" data-slug="<?php echo $this->html_name(); ?>">
125:             <?php if ( isset( $value->url ) ): ?>
126:                 <table class="papi-table link-table">
127:                     <tbody>
128:                         <tr>
129:                             <td>
130:                                 <?php _e( 'URL', 'papi' ); ?>
131:                             </td>
132:                             <td>
133:                                 <a href="<?php echo $value->url; ?>" target="_blank"><?php echo $value->url; ?></a>
134:                                 <input type="hidden" value="<?php echo $value->title . ' - ' . $value->url; ?>" data-papi-rule="<?php echo $this->html_name(); ?>">
135:                                 <input class="wp-link-url" type="hidden" value="<?php echo $value->url; ?>" name="<?php echo $this->html_name(); ?>[url]">
136:                             </td>
137:                         </tr>
138:                         <tr>
139:                             <td>
140:                                 <?php _e( 'Title', 'papi' ); ?>
141:                             </td>
142:                             <td>
143:                                 <?php echo $value->title; ?>
144:                                 <input class="wp-link-text" type="hidden" value="<?php echo $value->title; ?>" name="<?php echo $this->html_name(); ?>[title]">
145:                             </td>
146:                         </tr>
147:                         <tr>
148:                             <td>
149:                                 <?php _e( 'Target', 'papi' ); ?>
150:                             </td>
151:                             <td>
152:                                 <?php echo $value->target === '_blank' ? __( 'New window', 'papi' ) : __( 'Same window', 'papi' ); ?>
153:                                 <input class="wp-link-target" type="hidden" value="<?php echo $value->target; ?>" name="<?php echo $this->html_name(); ?>[target]">
154:                             </td>
155:                         </tr>
156:                     </tbody>
157:                 </table>
158:             <?php endif; ?>
159: 
160:             <p class="papi-file-select">
161:                 <span class="<?php echo isset( $value->url ) ? 'papi-hide' : ''; ?>">
162:                     <?php _e( 'No link selected', 'papi' ); ?>
163:                     <button class="button" data-link-action="add"><?php _e( 'Add link', 'papi' ); ?></button>
164:                 </span>
165:                 <span class="<?php echo isset( $value->url ) ? '' : 'papi-hide'; ?>">
166:                     <button class="button" data-link-action="edit"><?php _e( 'Edit link', 'papi' ); ?></button>
167:                     <button class="button" data-link-action="remove"><?php _e( 'Remove link', 'papi' ); ?></button>
168:                 </span>
169:             </p>
170:         </div>
171:         <?php
172:     }
173: 
174:     /**
175:      * Import value to the property.
176:      *
177:      * @param  mixed  $value
178:      * @param  string $slug
179:      * @param  int    $post_id
180:      *
181:      * @return mixed
182:      */
183:     public function import_value( $value, $slug, $post_id ) {
184:         if ( is_array( $value ) || is_object( $value ) ) {
185:             return $this->update_value( (array) $value, $slug, $post_id );
186:         }
187:     }
188: 
189:     /**
190:      * Prepare link array with post id. If it gets a post id
191:      * bigger then zero it will use the permalink as url.
192:      *
193:      * @param array|object $values
194:      *
195:      * @return array|object
196:      */
197:     protected function prepare_link_array( $values ) {
198:         $array  = is_array( $values );
199:         $values = (object) $values;
200: 
201:         // Don't continue without a url.
202:         if ( ! isset( $values->url ) || empty( $values->url ) ) {
203:             return $array ? (array) $values : $values;
204:         }
205: 
206:         // Don't overwrite existing post id.
207:         if ( ! isset( $values->post_id ) || empty( $values->post_id ) ) {
208:             $values->post_id = url_to_postid( $values->url );
209:         }
210: 
211:         // Only replace url when post id is not zero.
212:         if ( $values->post_id > 0 ) {
213:             $values->url = get_permalink( $values->post_id );
214:         }
215: 
216:         return $array ? (array) $values : $values;
217:     }
218: 
219:     /**
220:      * Render link template.
221:      */
222:     public function render_link_template() {
223:         ?>
224:         <script type="text/template" id="tmpl-papi-property-link">
225:             <table class="papi-table link-table">
226:                 <tbody>
227:                     <tr>
228:                         <td>
229:                             <?php _e( 'URL', 'papi' ); ?>
230:                         </td>
231:                         <td>
232:                             <%= link %>
233:                             <input type="hidden" value="<%= title %> - <%= href %>" data-papi-rule="<%= slug %>">
234:                             <input class="wp-link-url" type="hidden" value="<%= href %>" name="<%= slug %>[url]">
235:                         </td>
236:                     </tr>
237:                     <tr>
238:                         <td>
239:                             <?php _e( 'Title', 'papi' ); ?>
240:                         </td>
241:                         <td>
242:                             <%= title %>
243:                             <input class="wp-link-text" type="hidden" value="<%= title %>" name="<%= slug %>[title]">
244:                         </td>
245:                     </tr>
246:                     <tr>
247:                         <td>
248:                             <?php _e( 'Target', 'papi' ); ?>
249:                         </td>
250:                         <td>
251:                             <input class="wp-link-target" type="hidden" value="<%= target %>" name="<%= slug %>[target]">
252:                             <%= target === '_blank' ? '<?php _e( 'New window', 'papi' ) ?>' : '<?php _e( 'Same window', 'papi' ); ?>' %>
253:                         </td>
254:                     </tr>
255:                 </tbody>
256:             </table>
257:         </script>
258:         <?php
259:     }
260: 
261:     /**
262:      * Prepare value for the database.
263:      *
264:      * @param  mixed  $values
265:      * @param  string $slug
266:      * @param  int    $post_id
267:      *
268:      * @return array
269:      */
270:     public function update_value( $values, $slug, $post_id ) {
271:         $values = $this->prepare_link_array( $values );
272: 
273:         foreach ( $values as $key => $val ) {
274:             $values[$slug . '_' . $key] = $val;
275:             unset( $values[$key] );
276:         }
277: 
278:         $values[$slug] = 1;
279: 
280:         return $values;
281:     }
282: 
283:     /**
284:      * Setup actions.
285:      */
286:     protected function setup_actions() {
287:         add_action( 'admin_head', [$this, 'render_link_template'] );
288:     }
289: }
290: 
API documentation generated by ApiGen