Замена иерархических флажков с помощью выпадающего селектора в пользовательской таксономии внутри пользовательского типа публикации - PullRequest
3 голосов
/ 20 сентября 2019

Я видел несколько сообщений в блоге на эту тему, но не смог реализовать их с успехом.

Я пробовал следующее (возможно, одно из них - решение, и я немного не в себе):

  1. https://pagecrafter.com/dropdown-menu-of-all-terms-in-custom-taxonomy-wordpress/
  2. Wordpress - раскрывающийся список таксономии не работает с иерархическим
  3. https://www.noelsheppard.co.uk/create-dropdown-list-custom-taxonomy-terms/ (в основном пример 1)
  4. https://shibashake.com/wordpress-theme/wordpress-custom-taxonomy-input-panels
  5. наконец, перечитайте this

У меня есть CPT свойств, который имеет три пользовательских таксономии:

  1. Гости
  2. Комнаты
  3. Город (Городская таксономия заполняется с помощью пользовательской функции, которая отслеживает, когда второй CPT [Направления] создает новые сообщения, и добавляет то же имя.в качестве таксономии к записям свойств города)

Я хотел бы убедиться, что при создании сообщения свойства и установке его города выбран только один город (пункт назначения).Я хотел бы использовать раскрывающийся список для этого действия.

Следуя 1-й (или 3-й) ссылке, приведенной выше, я попробовал следующую реализацию:

Функция для инициализации в моем functions.php:

// Creates dropdown taxonomy select for guest taxonomy in Properties.
function dropdown_tax_init(){

  $categories = get_categories('taxonomy=city');
  $select     = "<select name='cat' id='cat' class='top-tags-dropdown'>n";
  $select .= "<option value='-1'>Select Tag</option>n";
  foreach ($categories as $category) {
      if ($category->count > 0) {
          $select .= "<option value='" . $category->slug . "'>" . $category->name . "</option>";
      }
  }
  $select .= "</select>";
  echo $select;

}

add_action( 'init', 'dropdown_tax_init' );

Я также вызываю js через мой functions.php следующим образом:

function admin_footer_script() {
    wp_register_script('dropdown_tax_script', get_template_directory_uri() . '/js/taxonomy-dropdown.js', array('jquery'), '1.0.0'); // Conditional script(s)
    wp_enqueue_script('dropdown_tax_script'); // Enqueue it!
}

add_action( 'admin_footer', 'admin_footer_script' );

Наконец, мой js выглядит следующим образом:

var dropdown = document.getElementById("cat");

function onCatChange() {
    if (dropdown.options[dropdown.selectedIndex].value != -1) {
        location.href = "<?php echo home_url();?>/city/" + dropdown.options[dropdown.selectedIndex].value + "/";
    }
}
dropdown.onchange = onCatChange;

Мой javascriptотображается в inspect в нижнем колонтитуле администратора.

Раскрывающийся список мигает при загрузке, но пользовательские таксономии не загружаются, когда у меня есть функция в моей функции. php что-то нарушает загрузку пользовательских таксономий в правой боковой панелив редакторе Гутенберга.Они никогда не появляются.

Рады в подробностях, спасибо.

1 Ответ

0 голосов
/ 21 сентября 2019

Не уверен, является ли это основной причиной, но в любом случае вы не можете выполнить код PHP в форме Javascript следующим образом:

location.href = "<?php echo home_url();?>/city/" + '...';

Это может привести к неверному URL и сбою перенаправления.Если вам нужно передать некоторые значения из PHP в JS, используйте функцию wp_localize_script().Проверьте detailes здесь .

Чтобы устранить другие потенциальные проблемы, вам необходимо выполнить несколько отдельных тестов:

  1. на стороне PHP.Убедитесь, что ваш массив $categories не пустой и содержит непустые категории, или просто проверьте вывод $select (без выполнения какого-либо связанного JS на данный момент).
  2. JS-сторона.Регистрируйте каждый вызов onCatChange() на консоли, чтобы быть уверенным, что событие onchange: a) срабатывает правильно, 2) не инициируется по какой-либо другой причине (например, потеря фокуса в старых IE или другие хитрые сюрпризы).Затем запишите строковое значение, присвоенное location.href, и убедитесь, что оно не повреждено и является действительным URL.

Дополнительные советы:

  • Всегда выходите из выходных данных($category->slug, $category->name - они не всегда надежны и иногда могут сломать вашу разметку);
  • Вероятно, пропущены обратные слеши при вставке разрывов строк в строки: должно быть \n, а не просто n?
  • Если вы вызываете скрипт с зависимостью array('jquery'), не стесняйтесь использовать jQuery вместо ванильного JavaScript.Это может помочь вам избежать проблем с кроссбраузером.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...