add_action и remove_action, если пользовательское поле существует

Я знаю, что это может быть не по теме, поскольку это связано с Genesis (премиальная структура), но с общим WordPress это связано с запуском remove_action и add_action зависимости от того, существует ли пользовательское поле. Я не вижу ничего простого, что я делаю неправильно здесь.

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

Почему

remove_action( 'genesis_before_loop', 'genesis_do_breadcrumbs' ); add_action('genesis_before_loop', 'customfield_breadcrumbs');

пожар, когда пользовательское поле существует, удалите customfield_breadcrumbs по умолчанию, добавьте customfield_breadcrumbs и затем echo меня на свое настраиваемое поле?

Полная функция:

 function customfield_breadcrumbs() { global $post; $crumb = get_post_meta($post->ID, 'custom_breadcrumb', true); if ($crumb) { remove_action( 'genesis_before_loop', 'genesis_do_breadcrumbs' ); add_action('genesis_before_loop', 'customfield_breadcrumbs'); echo '<div class="breadcrumb">'; echo get_post_meta($post->ID, 'custom_breadcrumb', $single = true); echo '</div>'; } } 

Это корректно выводит html (из $ post и $ crumb) настраиваемого поля, но мне нужно отображать патчи по умолчанию, если нет специального поля:

  function customfield_breadcrumbs() { global $post; $crumb = get_post_meta($post->ID, 'custom_breadcrumb', true); if ($crumb) { echo '<div class="breadcrumb">'; echo get_post_meta($post->ID, 'custom_breadcrumb', $single = true); echo '</div>'; } } 

И это основная функция сундука из книги Бытия:

 function genesis_breadcrumb( $args = array() ) { global $_genesis_breadcrumb; if ( ! $_genesis_breadcrumb ) $_genesis_breadcrumb = new Genesis_Breadcrumb; $_genesis_breadcrumb->output( $args ); } add_action( 'genesis_before_loop', 'genesis_do_breadcrumbs' ); 

И они настроены настройками в Genesis >> Настройки темы:

введите описание изображения здесь

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

 add_action( 'template_redirect', 'check_breadcrumb_condition' ); function check_breadcrumb_condition(){ global $post; $crumb = get_post_meta($post->ID, 'custom_breadcrumb', true); if ($crumb) { remove_action( 'genesis_before_loop', 'genesis_do_breadcrumbs' ); add_action( 'genesis_before_loop', 'customfield_breadcrumbs' ); } } function customfield_breadcrumbs() { global $post; echo '<div class="breadcrumb">'; echo get_post_meta($post->ID, 'custom_breadcrumb', true); echo '</div>'; }