Post-Formate - Wie wechsle ich Meta-Boxen, wenn ich das Format ändere?

7

Problem

Nachdem ich festgestellt habe, dass Postformate ziemlich beliebt sind, aber nur ein extrem grob gezeichnetes Konzept, sehe ich, dass Benutzer auf mögliche Fallen stoßen werden.

Beitragsformat ...

  • verwendet Post-Meta-Felder und der Benutzer kann sich nicht an den genauen Namen des Meta-Schlüssels erinnern.
  • Nimmt den Link / das Einbetten / welches Objekt auch immer aus dem Post-Editor und der Benutzer gibt falsche Daten ein.

Beides sind Beispiele für mögliche Fallen, die ein Benutzer treffen könnte.

Idee

Das Post-Format verfügt über ein benutzerdefiniertes Meta-Feld, in das nur die erwarteten Daten eingegeben werden können.

Die Idee selbst ist nicht so schlecht, aber es gibt immer noch das Problem, das der Benutzer haben müsste

  • Daten in das richtige Meta-Feld einfügen
  • Wählen Sie dann das entsprechende Post-Format.

Frage

Was ich suche ist

  • Eine Lösung, die die Meta-Box (oder nur ihren Inhalt) basierend auf der Auswahl, die ein Benutzer in der Meta-Box der Post-Formate trifft, wechselt (Ajax)

ODER...

  • Verwenden Sie die Registerkarten ajax / jquery-ui in der Meta-Box, um den Inhalt der Meta-Box zu wechseln und das entsprechende Post-Format unter 'save_post' zu speichern.

Hinweis:
Ich suche nicht nach dem genauen Inhalt der Meta-Box. Am interessantesten ist es, die "Umgebung" in verschiedenen codeBeispielen zu sehen.

Vielen Dank!

Kaiser
quelle

Antworten:

4

Ich habe so etwas einmal gemacht, aber wenn Sie auf eine bestimmte Kategorie geklickt haben (im Wesentlichen dieselbe), ist es sicherlich keine echte Ajax-Lösung, es verbirgt und enthüllt nur das Div mit den Einstellungen, aber es ist eine Lösung, die funktioniert. Sie müssen dies definitiv an Ihre Bedürfnisse anpassen, aber wenn Sie sich mit jQuery auskennen, können Sie dies sicher an Ihre Bedürfnisse anpassen. Wenn Sie etwas spezifischer auf Ihre Bedürfnisse eingehen, würde ich dies gerne so bearbeiten, dass es genau Ihren Wünschen entspricht.

Der Code:

Ich habe dies in einem Plugin verwendet, aber Sie können dies einfach in die functions.php Ihres Themas einfügen

function customadmin_testimonial() {
    if ( is_admin() ) {
        $script = <<< EOF
<script type='text/javascript'>
    jQuery(document).ready(function($) {
        $('#testimonial-information').hide();
        $('#in-category-3').is(':checked') ? $("#testimonial-information").show() : $("#testimonial-information").hide();
        $('#in-category-3').click(function() {
            $("#testimonial-information").toggle(this.checked);
        });
    });
</script>
EOF;
        echo $script;
    }
}
add_action('admin_footer', 'customadmin_testimonial');

Grundsätzlich haben Sie hier ein jQuery-Skript, das zunächst eine Meta-Box verbirgt, die ich bereits eingerichtet habe. Die ID der Box lautet # Testimonial-Information. Anschließend wird überprüft, ob das Kontrollkästchen der jeweiligen Kategorie aktiviert ist, und wenn dies der Fall ist, wird es angezeigt. Dann wartet es auf einen Klick auf das Feld der jeweiligen Kategorie und schaltet dessen Sichtbarkeit um.

Das Ergebnis:

Eine Meta-Box, die nur sichtbar ist, wenn der Benutzer eine bestimmte Kategorie ausgewählt hat. Sie müssen lediglich Ihre Metaboxen einrichten und alle IDs der benötigten Elemente abrufen. Sie benötigen die IDs der Metaboxen sowie die betreffenden Kontrollkästchen. Dann müssen Sie nur noch dieser Formel folgen, um das zu bekommen, wonach Sie suchen.

Wenn Sie alles eingerichtet haben, aber beim Schreiben des Javascript Probleme haben, geben Sie mir einfach die IDs der Metaboxen und der entsprechenden Kontrollkästchen und ich würde es gerne für Sie aufschreiben.

Drew Gourley
quelle
+1 und als Lösung markiert. Sie können die endgültige und funktionierende Lösung oben sehen.
Kaiser
5

Dies ist die letzte Javascript-Funktion. Es sollte in den admin_footerHaken eingehängt werden .

/**
 * jQuery show/hide for meta box, post editor meta box
 * 
 * Hides/Shows boxes on demand - depending on your selection inside the post formats meta box
 */
function wpse14707_scripts()
{
    wp_enqueue_script( 'jquery' );

    $script = '<<< EOF
    <script type="text/javascript">
        jQuery( document ).ready( function($)
            {
                $( "#post_format_box" ).addClass( "hidden" );

                $( "input#post-format-0" ).change( function() {
                    $( "#postdivrich" ).removeClass( "hidden" );
                    $( "#post_format_box" ).addClass( "hidden" );
                } );

                $( "input:not(#post-format-0)" ).change( function() {
                    $( "#postdivrich" ).addClass( "hidden" );
                    $( "#post_format_box" ).removeClass( "hidden" );
                } );

                $( "input[name=\"post_format\"]" ).click( function() {
                    var mydiv = $(this).attr( "id" ).replace( "post-format-", "" );
                    $( "#post_format_box div.inside div" ).addClass("hidden");
                    $( "#post_format_box div.inside div#"+mydiv).removeClass( "hidden" );
                } );
            }
        );
    </script>
    EOF';

    return print $script;
}
add_action( 'admin_footer', 'wpse14707_scripts' );
Kaiser
quelle
2
Genial! Ich bin froh, dass alles funktioniert.
Drew Gourley