Выбор новой и редактируемой страницы для пользовательских типов сообщений

Я, вероятно, что-то пропустил, если это действительно невозможно, по какой-то причине я не могу заставить мою функцию выполнять только на новой и редактируемой странице пользовательского типа сообщения (это не проблема):

В настоящее время я использую:

if ((isset($_GET['post_type']) && $_GET['post_type'] == 'events') || (isset($post_type) && $post_type == 'tf_events')) { add_action('admin_init', "admin_head"); } 

Однако это работает только для добавления нового сообщения, где URL-адрес:

 /post-new.php?post_type=events 

Но для редактирования сообщения это не работает, где URL-адрес:

 /post.php?post=12&action=edit 

(хотя тип сообщения не добавляется к атрибуту ссылки)

РАБОЧИЙ КОД (См. Ответ от Марка ниже):

 // 7. JS Datepicker UI function events_styles() { global $post_type; if( 'tf_events' != $post_type ) return; wp_enqueue_style('ui-datepicker', get_bloginfo('template_url') . '/css/jquery-ui-1.8.9.custom.css'); } function events_scripts() { global $post_type; if( 'tf_events' != $post_type ) return; wp_deregister_script('jquery-ui-core'); wp_enqueue_script('jquery-ui', get_bloginfo('template_url') . '/js/jquery-ui-1.8.9.custom.min.js', array('jquery')); wp_enqueue_script('ui-datepicker', get_bloginfo('template_url') . '/js/jquery.ui.datepicker.min.js'); wp_enqueue_script('custom_script', get_bloginfo('template_url').'/js/pubforce-admin.js', array('jquery')); } add_action( 'admin_print_styles-post.php', 'events_styles', 1000 ); add_action( 'admin_print_styles-post-new.php', 'events_styles', 1000 ); add_action( 'admin_print_scripts-post.php', 'events_scripts', 1000 ); add_action( 'admin_print_scripts-post-new.php', 'events_scripts', 1000 ); 

Хорошо, полная ревизия моего первоначального ответа, который просто превратился в беспорядок.

Проблема с вашим кодом заключается в том, что вы запускаете init, это охватывает каждую страницу администратора, и, кроме того, слишком рано проверять vars для разработки текущей страницы (хотя вы можете просто проверить $_GET если вам действительно нужно запустить код это рано).

Вы хотите специально подключиться к страницам редактирования сообщений, хотя вы не указали, что вам нужно запускать в списке сообщений (edit.php), поэтому я исключу это из следующих примеров.

Вы можете подключиться к нескольким различным действиям, которые происходят внутри главы администратора, и делать все, что вам нужно, и иметь возможность надежно проверять тип сообщения, предоставляя $post_type scope внутри вашей функции обратного вызова.

Таким образом, ваш обратный вызов будет немного похож на это.

 function mycallback() { global $post_type; if( 'events' != $post_type ) return; // Do your code here } 

Какое действие вы хотите, чтобы зацепиться за то, что вы хотите запустить в этот момент, если вы ничего не делаете, но хотите что-то выполнить, тогда, возможно, будет полезен общий крюк администратора.

 add_action( 'admin_head-post.php', 'mycallback', 1000 ); add_action( 'admin_head-post-new.php', 'mycallback', 1000 ); 

Если вы загружаете скрипт, вы можете использовать ..

 add_action( 'admin_print_scripts-post.php', 'mycallback', 1000 ); add_action( 'admin_print_scripts-post-new.php', 'mycallback', 1000 ); 

Если вы загружаете таблицу стилей, то, возможно, ..

 add_action( 'admin_print_styles-post.php', 'mycallback', 1000 ); add_action( 'admin_print_styles-post-new.php', 'mycallback', 1000 ); 

Else мне нужно узнать больше о том, что вы делаете … 🙂

вы можете попытаться вызвать глобальную $ post так:

 global $post; if ((isset($_GET['post_type']) && $_GET['post_type'] == 'events') || (isset($post_type) && $post_type == 'tf_events') || (get_post_type($post) == "events") || (get_post_type($post) == "tf_events")){) { add_action('admin_init', "admin_head"); } 

Обновить

пытаться :

 global $typenow; if( 'your_post_type' == $typenow ){ // do you stuff } 

также убедитесь, что ваш вызов register_post_type выполняется первым, поэтому тип сообщения регистрируется до запуска этого кода.

Надеюсь это поможет.