Требуется показанное изображение


Я хотел бы запросить изображение на сайте, который я разрабатываю.

Я попробовал код здесь: Сделать изображение обязательным для показа, и ничего не произошло - JS появился в заголовке сайта, но я все еще мог сохранить сообщение без изображения, и никогда не получал сообщение об ошибке.

Есть несколько плагинов, которые делают это, такие как Обязательное поле и WyPiekacz, но мне нужно сделать что-то более сложное... У меня есть специальная мета-коробка с радио кнопки. Мне нужно требовать показываемое изображение только в том случае, если установлен определенный переключатель. Мне уже требуются некоторые другие поля (категория и некоторые пользовательские таксономии), если установлены определенные переключатели с использованием проверки jQuery.

Так что, думаю, я могу свести это к двум вопросам:

  1. Какой хороший способ потребовать показанное изображение?

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

На вопрос 1, вероятно, гораздо проще ответить, и если кто-то может ответить на вопрос № 1, то я, вероятно, смогу самостоятельно решить вопрос № 2.

Author: Community, 2013-01-29

2 answers

Я бы сделал это, подключившись к действию save_post, а не с помощью javascript.

Основная идея состоит в том, чтобы проверить, присутствуют ли оба значения (выбрана ваша кнопка радиосвязи И присутствует post_thumbnail), и установить запись в черновик, если их нет, а также отобразить информацию, если пользователь не выполняет требования.

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

<?php
// this function checks if the checkbox and the thumbnail are present
add_action('save_post', 'f711_option_thumbnail');

function f711_option_thumbnail($post_id) {
    // get the value that is selected for your select, don't know the specifics here
    // you may need to check this value from the submitted $_POST data.
    $checkoptionvalue = get_post_meta( $post_id, "yourmetaname", true );
    if ( !has_post_thumbnail( $post_id ) && $checkoptionvalue == "yourvalue" ) {
        // set a transient to show the users an admin message
        set_transient( "post_not_ok", "not_ok" );
        // unhook this function so it doesn't loop infinitely
        remove_action('save_post', 'f711_option_thumbnail');
        // update the post set it to draft
        wp_update_post(array('ID' => $post_id, 'post_status' => 'draft'));
        // re-hook this function
        add_action('save_post', 'f711_option_thumbnail');
    } else {
        delete_transient( "post_not_ok" );
    }
}

// add a admin message to inform the user the post has been saved as draft.

function showAdminMessages()
{
            // check if the transient is set, and display the error message
    if ( get_transient( "post_not_ok" ) == "not_ok" ) {
        // Shows as an error message. You could add a link to the right page if you wanted.
        showMessage("You need to select a Post Thumbnail if you choose this Option. Your Post was not published.", true);
                // delete the transient to make sure it gets shown only once.
        delete_transient( "post_not_ok" );
    }

}   
add_action('admin_notices', 'showAdminMessages');       
// function to display the errormessage
function showMessage($message, $errormsg = false)
{
    if ($errormsg) {
        echo '<div id="message" class="error">';
    }
    else {
        echo '<div id="message" class="updated fade">';
    }

    echo "<p><strong>$message</strong></p></div>";

}   


?>
 2
Author: fischi, 2013-02-05 09:43:59

Вот что я в итоге сделал:

      jQuery('#post').submit(function() {
            if (jQuery('.force').is(':checked')) {
              if (jQuery("#set-post-thumbnail").find('img').size() > 0) {
                jQuery('#ajax-loading').hide();
                jQuery('#publish').removeClass('button-primary-disabled');
                return true;
              }else{
                alert("Please set a Featured Image!");
                jQuery('#ajax-loading').hide();
                jQuery('#publish').addClass('button-primary-disabled');
                return false;
              }
            }else{
              return true;
            }
            return false;
            });

Как я уже сказал в своем комментарии к fischi, я бы предпочел использовать метод PHP, подобный его, но в этом случае мой сайт в любом случае полагается на множество проверок jQuery, поэтому имело смысл просто придерживаться метода JavaScript. Для меня это работает просто отлично.

 0
Author: Morgan Kay, 2013-02-05 17:56:07