Предопределенные значения для выбора пользователем в пользовательском типе записи (метаданные и таксономия)

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

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

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

Что было бы хорошим способом добиться этого в Wordpress? Должен ли я просто сохранить их как предопределенные значения в поле выбора через форму, а затем сохранить данные в виде текста в метаданных или есть лучшая альтернатива?

function slicer_profile_form()
{
    echo '<form action="' . esc_url( $_SERVER['REQUEST_URI'] ) . '" method="post" enctype="multipart/form-data">';

    echo '<p>';
    echo 'Your Name<br />';
    echo '<input type="text" name="slicer-profile-author" pattern="[a-zA-Z0-9 ]+" value="' . ( isset( $_POST["slicer-profile-author"] ) ? esc_attr( $_POST["slicer-profile-author"] ) : '' ) . '" size="48" />';
    echo '</p>';

    echo '<p>';
    echo 'Profile Name<br />';
    echo '<input type="text" name="slicer-profile-name" pattern="[a-zA-Z0-9 ]+" value="' . ( isset( $_POST["slicer-profile-name"] ) ? esc_attr( $_POST["slicer-profile-name"] ) : '' ) . '" size="48" />';
    echo '</p>';

    echo '<p>';
    echo 'Profile Description<br />';
    echo '<textarea name="slicer-profile-description" pattern="[a-zA-Z0-9 ]+" value="' . ( isset( $_POST["slicer-profile-description"] ) ? esc_attr( $_POST["slicer-profile-description"] ) : '' ) . '" rows="4"></textarea>';
    echo '</p>';

    echo '<p>';
    echo '3D Printer Model<br />';
    echo '<select name="slicer-profile-model">';
    echo '<option value="a8">Anet A8</option>';
    echo '<option value="cr10">Creality CR-10</option>';
    echo '<option value="mini">Monoprice Select Mini</option>';
    echo '<option value="makerselect">Monoprice Maker Select</option>';
    echo '<option value="ultimate">Monoprice Ultimate</option>';
    echo '<option value="prusamk2">Prusa MK2/MK2S/MK3</option>';
    echo '</select>';
    echo '</p>';

    echo '<p>';
    echo 'Slicer Software<br />';
    echo '<select name="slicer-profile-software">';
    echo '<option value="cura">Cura</option>';
    echo '<option value="s3d">Simplify3D</option>';
    echo '<option value="slic3r">Slic3r</option>';
    echo '</select>';
    echo '</p>';

    echo '<p>';
    echo 'Slicer Profile<br />';
    echo '<input type="file" name="slicer-profile" accept=".fff,.ini,.curaprofile">';
    echo '</p>';

    echo '<p><input type="submit" name="slicer-profile-submitted" value="Submit"/></p>';
    echo '</form>';
}

person Aidan Knight    schedule 22.03.2018    source источник


Ответы (1)


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

Если у вас просто более общий CPT, к которому просто нужно прикрепить немного произвольной информации, вот что такое Custom Поля преуспевают. Это в основном для произвольной информации, которая не относится к какой-либо категории, например Price, Event Start Date или Facebook Group/Page URL.

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

Помимо прочего, есть ли какая-то конкретная причина, по которой вы используете оператор эха для каждой строки вместо того, чтобы просто закрывать тег PHP и повторять несколько переменных PHP, которые у вас есть внутри стандартного HTML?

function slicer_profile_form(){ ?>
    <form action="<?= esc_url( $_SERVER['REQUEST_URI'] ); ?>" method="post" enctype="multipart/form-data">
        <label>
            Your Name<br>
            <input type="text" name="slicer-profile-author" pattern="[a-zA-Z0-9 ]+" value="<?= ( isset( $_POST["slicer-profile-author"] ) ? esc_attr( $_POST["slicer-profile-author"] ) : '' ); ?>" size="48" />
        </label>
        <label>
            Profile Name<br>
            <input type="text" name="slicer-profile-name" pattern="[a-zA-Z0-9 ]+" value="<?= ( isset( $_POST["slicer-profile-name"] ) ? esc_attr( $_POST["slicer-profile-name"] ) : '' ); ?>" size="48" />
        </label>
        <label>
            Profile Description<br>
            <textarea name="slicer-profile-description" pattern="[a-zA-Z0-9 ]+" value="<?= ( isset( $_POST["slicer-profile-description"] ) ? esc_attr( $_POST["slicer-profile-description"] ) : '' ); ?>" rows="4"></textarea>
        </label>
        <label>
            3D Printer Model<br>
            <select name="slicer-profile-model">
                <option value="a8">Anet A8</option>
                <option value="cr10">Creality CR-10</option>
                <option value="mini">Monoprice Select Mini</option>
                <option value="makerselect">Monoprice Maker Select</option>
                <option value="ultimate">Monoprice Ultimate</option>
                <option value="prusamk2">Prusa MK2/MK2S/MK3</option>
            </select>
        </label>
        <label>
            Slicer Software<br>
            <select name="slicer-profile-software">
                <option value="cura">Cura</option>
                <option value="s3d">Simplify3D</option>
                <option value="slic3r">Slic3r</option>
            </select>
        </label>
        <label>
            Slicer Profile<br>
            <input type="file" name="slicer-profile" accept=".fff,.ini,.curaprofile">
        </label>
        <p>
            <input type="submit" name="slicer-profile-submitted" value="Submit" />
        </p>
    </form>
<?php } ?>
person Xhynk    schedule 22.03.2018
comment
Благодарю вас! Я просто никогда не использовал таксономии ни в одном из своих плагинов, поэтому немного не был уверен в их назначении. Я пошел дальше и начал преобразовывать эти 2 поля, и теперь, когда это реализовано, я думаю, что они намного лучше подходят для этой цели. Я просто заполняю поля выбора в пользовательском интерфейсе соответствующими терминами таксономии, где пользователь может выбирать из списка. Таким образом, все, что я добавляю/редактирую/удаляю, также отражается там (намного лучше, чем жестко запрограммированный список). - person Aidan Knight; 22.03.2018
comment
Что касается всех отдельных эхо-строк, я почти уверен, что скопировал фрагмент кода для проверки ранее и просто сохранил их формат для этого конкретного блока кода. Обычно я этого не делаю, это меня раздражает, но я просто проверял, что работает, а что нет :) - person Aidan Knight; 22.03.2018
comment
Ха-ха, я знаю это чувство! У меня есть устаревший код для больших проектов, который я не могу полностью реорганизовать, поэтому мне приходится адаптироваться к обновлениям ????. Рад, что вы разобрались с налогом, я думаю - в долгосрочной перспективе это будет гораздо лучше с меньшим количеством головной боли. Удачи! - person Xhynk; 22.03.2018