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;
     }
 }
Example #3
0
<?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;
 }