it-swarm.com.de

Empfohlenes Bild anfordern

Ich möchte ein Bild für eine Site, die ich gerade entwickle, benötigen.

Ich habe den Code hier ausprobiert: Erforderliches Bild erstellen und es ist nichts passiert - der JS wurde im Site-Header angezeigt, aber ich konnte den Beitrag immer noch ohne Bild speichern und bekam keine Fehlermeldung.

Es gibt mehrere Plugins, die dies tun, wie z. B. Mandatory Field und WyPiekacz, aber ich muss etwas Komplizierteres tun ... Ich habe ein benutzerdefiniertes Meta-Feld mit Optionsfeldern. Ich benötige nur dann ein vorgestelltes Bild, wenn ein bestimmtes Optionsfeld aktiviert ist. Ich benötige bereits einige andere Felder (Kategorie und einige benutzerdefinierte Taxonomien), wenn bestimmte Optionsfelder mithilfe der jQuery-Validierung aktiviert sind.

Ich kann das also auf zwei Fragen reduzieren:

  1. Was ist ein guter Weg, um ein vorgestelltes Bild zu fordern?

  2. Wie kann ich das in eine vorhandene Validierung integrieren und nur dann ein ausgewähltes Bild anfordern, wenn ein Optionsfeld ausgewählt ist?

Frage 1 ist wahrscheinlich viel einfacher zu beantworten, und wenn jemand # 1 beantworten kann, dann kann ich # 2 wahrscheinlich selbst herausfinden.

5
Morgan Kay

Folgendes habe ich letztendlich getan:

      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;
            });

Wie ich in meinem Kommentar zu fischi sagte, würde ich im Allgemeinen eine PHP -Methode wie seine vorziehen, aber in diesem Fall stützt sich meine Site ohnehin auf viel jQuery-Validierung, sodass es Sinn machte, einfach zu bleiben mit einer JavaScript-Methode. Das funktioniert gut für mich.

0
Morgan Kay

Ich würde dies tun, indem ich mich in die Aktion save_post einhänge, nicht per Javascript.

Die Hauptidee ist, zu überprüfen, ob beide Werte vorhanden sind (Ihr Radiobutton ist ausgewählt UND der post_thumbnail ist vorhanden), und den Beitrag auf Entwurf zu setzen, wenn dies nicht der Fall ist, sowie eine Information anzuzeigen, wenn der Benutzer die Anforderungen nicht erfüllt.

Schließen Sie sich zunächst der Aktion save_post an und prüfen Sie, ob der Radiobutton Ihren Wert und das Post-Thumbnail ausgewählt haben. Wenn alles in Ordnung ist, müssen Sie nichts weiter tun, aber in Ihrem speziellen Fall müssen Sie verhindern, dass der Beitrag veröffentlicht wird, und eine Fehlermeldung anzeigen, um den Benutzer zu informieren.

<?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