web-dev-qa-db-ja.com

注目の画像が必要

私が開発しているサイトにおすすめの画像が必要です。

私はここでコードを試してみました: 特集画像を必須にする そして何も起こらなかった - JSはまだ特集画像なしで投稿を保存することができ、エラーメッセージを受け取ることはありませんでした。

Mandatory FieldやWyPiekaczなど、これを行うプラグインがいくつかありますが、もっと複雑なことをする必要があります...ラジオボタン付きのカスタムメタボックスがあります。特定のラジオボタンがチェックされている場合にのみ、特集画像を要求する必要があります。特定のラジオボタンがチェックされている場合、jQuery検証を使用して、他のフィールド(カテゴリおよびカスタム分類法)が既に必要です。

だから私はこれを2つの質問にまとめることができると思います:

  1. 注目の画像を要求するための良い方法は何ですか?

  2. これを既存の検証に統合し、ラジオボタンが選択されている場合にのみ注目の画像を要求するにはどうすればよいですか。

質問1はおそらく答えるのがはるかに簡単です、そして誰かが#1に答えることができるなら、私はおそらく私自身で#2を理解することができます。

5
Morgan Kay

これが私がやってしまったものです:

      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
Morgan Kay

これは、JavaScriptではなくsave_postアクションにフックすることで行います。

両方の値が存在するかどうか(あなたのラジオボタンが選択されていて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
fischi