public function options() { if (!current_user_can('manage_options')) { wp_die(__('You do not have sufficient permissions to access this page.')); } if (isset($_GET['settings-updated']) && $_GET['settings-updated']) { // We need to rewrite. flush_rewrite_rules(); } Pkj_AnyParentType_Global::instance()->render('admin/admin.php', array('available_schemas' => Pkj_AnyParentType_Global::instance()->get_available_post_type_schemas())); }
public function add_meta_boxes_add_callback($post, $box) { global $post; $schema = $box['args']['schema']; $lookup = Pkj_AnyParentType_Global::instance()->get_lookup_schema(); $post_type_object = get_post_type_object($post->post_type); $isFirst = true; foreach ($schema['values'] as $k => $pageType) { $pages = wp_dropdown_pages(array('post_type' => $pageType, 'selected' => $post->post_parent, 'name' => 'selection-parent-id-' . $pageType, 'id' => 'selection-parent-id-' . $pageType, 'show_option_none' => __('(no parent)'), 'sort_column' => 'menu_order, post_title', 'echo' => 0)); // Only ONCE: if ($isFirst) { ?> <script> jQuery(function ($) { $( "select[name^='selection-parent-id-']").each(function () { $(this).change(function () { $('#parent_id').val($(this).val()); var status = $('#parent_id_status'); var newText = $(this).children(':selected').text(); status.text(newText); $( "select[name^='selection-parent-id-']").not(this).val(''); }); }); }); </script> <?php echo "<p><strong>" . __('Selected parent', 'pkj-any-parent-type') . ":</strong>\r\n <span id='parent_id_status'>\r\n " . ($post->post_parent ? get_the_title($post->post_parent) : __('(no parent)')) . "\r\n </span></p>\r\n <input type='hidden' id='parent_id' name='parent_id' value='{$post->post_parent}' />"; } if (!empty($pages)) { $label = $lookup[$pageType]; echo "<p><strong>{$label}: </strong> "; echo $pages; echo "</p>"; } // end empty pages check $isFirst = false; } }
<?php /* Plugin Name: PKJ Any Parent Type Text Domain: pkj-any-parent-type Plugin URI: https://github.com/peec/pkj-any-parent-type Description: This plugin lets you select what parent pages you allow to set for custom post types. By default only the same type is allowed. Version: 0.0.3 Author: Petter Kjelkenes Author URI: http://pkj.no License: GPLv2 or later */ define('PKJ_PLUGIN_ANY_PARENT_TYPE_PATH', dirname(__FILE__)); define('PKJ_PLUGIN_ANY_PARENT_TYPE_NAME', 'pkj-any-parent-type'); define('PKJ_PLUGIN_ANY_PARENT_TYPE_FILE', __FILE__); $classes = array('Pkj_AnyParentType_Global', 'Pkj_AnyParentType_AdminPage', 'Pkj_AnyParentType_Rewrite', 'Pkj_AnyParentType_MetaBox'); foreach ($classes as $class) { include PKJ_PLUGIN_ANY_PARENT_TYPE_PATH . "/includes/{$class}.php"; } Pkj_AnyParentType_Global::instance(); Pkj_AnyParentType_AdminPage::instance(); Pkj_AnyParentType_MetaBox::instance(); Pkj_AnyParentType_Rewrite::instance();
public function rewrite_rules_add_rules($existingRules) { global $post; $postTypeSchema = Pkj_AnyParentType_Global::instance()->get_post_type_schema(); foreach ($postTypeSchema as $postType => $info) { // suppress_filters for wpml $q = new WP_Query("suppress_filters=1&nopaging=true&post_type={$postType}"); while ($q->have_posts()) { $q->the_post(); //var_dump($post); if ($this->rewrite_rules_should_rewrite($post)) { $rule = $this->rewrite_rules_get_rule($post); $existingRules = array_merge(array($rule['from'] => $rule['to']), $existingRules); } } wp_reset_postdata(); } return $existingRules; }