Требуется показанное изображение
Я хотел бы запросить изображение на сайте, который я разрабатываю.
Я попробовал код здесь: Сделать изображение обязательным для показа, и ничего не произошло - JS появился в заголовке сайта, но я все еще мог сохранить сообщение без изображения, и никогда не получал сообщение об ошибке.
Есть несколько плагинов, которые делают это, такие как Обязательное поле и WyPiekacz, но мне нужно сделать что-то более сложное... У меня есть специальная мета-коробка с радио кнопки. Мне нужно требовать показываемое изображение только в том случае, если установлен определенный переключатель. Мне уже требуются некоторые другие поля (категория и некоторые пользовательские таксономии), если установлены определенные переключатели с использованием проверки jQuery.
Так что, думаю, я могу свести это к двум вопросам:
Какой хороший способ потребовать показанное изображение?
Как я могу интегрировать это в некоторую существующую проверку и требовать, чтобы показанное изображение было только в том случае, если переключатель выбран?
На вопрос 1, вероятно, гораздо проще ответить, и если кто-то может ответить на вопрос № 1, то я, вероятно, смогу самостоятельно решить вопрос № 2.
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>";
}
?>
Вот что я в итоге сделал:
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. Для меня это работает просто отлично.