Zeigen Sie alle Werte eines benutzerdefinierten Felds an, das mit ACF auf einer Seite erstellt wurde


9

Ich verwende Advanced Custom Fields / ACF , um benutzerdefinierte Felder zu erstellen. Eines davon ist eine Liste von Kontrollkästchen, in denen einige Optionen angezeigt werden (Option1, Option2, Option3 ...) .

Jetzt möchte ich alle Optionen dieses Feldes auf einer separaten Seite im Frontend wie folgt anzeigen:

Optionen:
- Option 1
- Option 2
- Option 3
- ...

Wie kann ich alle Optionen mit Schlüsseln von ACF abrufen?


Bitte seien Sie sich etwas klarer darüber, was genau Sie erreichen möchten. ACF wurde erstellt, um die Ausgabe der benutzerdefinierten Felder im Frontend anzuzeigen und keine Frontend-Eingabe zuzulassen.
SickHippie

Antworten:


16

Die get_field_objectACF-Funktion kann verwendet werden, um Informationen und Optionen für ein bestimmtes Feld abzurufen.

Zuerst benötigen Sie den Feldschlüssel des spezifischen Feldes, das Sie ausgeben möchten. Klicken Sie beim Bearbeiten einer Feldgruppe oben auf der Seite auf die Registerkarte Bildschirmoptionen. Sie sollten eine Option zum Umschalten der Anzeige der Feldtaste sehen (diese ist standardmäßig ausgeblendet, um Platz zu sparen):

Feldschlüssel

Sobald Sie den Schlüssel haben, können Sie das Feldobjekt laden und seine Werte ausgeben:

$field_key = "field_5039a99716d1d";
$field = get_field_object($field_key);

if( $field )
{
    echo '<select name="' . $field['key'] . '">';
        foreach( $field['choices'] as $k => $v )
        {
            echo '<option value="' . $k . '">' . $v . '</option>';
        }
    echo '</select>';
}

Es wäre schön, wenn wir auf den Namen verweisen könnten, so einfach wie es ist, den Schlüssel zu verwenden. Auf diese Weise müssen Sie, wenn Sie dies in einem Plugin haben und es jemals auf einer anderen Instanz von WordPress mit aktiviertem acf testen mussten, den Schlüssel nicht suchen und erneut ändern, nur weil Sie sich in der Umgebung befinden. B.
klewis

0

Wenn Sie versuchen, etwas auszugeben, wenn ein Kontrollkästchen aktiviert war, verwenden Sie:

<?php if(in_array('news', get_field('checkbox') )): ?>
    <h1>News was ticked!</h1>
<?php endif; ?>

Wenn Sie nur eine Liste der aktivierten Optionen anzeigen möchten, verwenden Sie Folgendes:

<p>Categories: <?php get_field('checkbox'); ?></p>

Dadurch erhalten Sie eine Reihe von Werten, die Sie mit einer foreachDeklaration verwalten können. Wenn the_field('checkbox')Sie verwenden, erhalten Sie eine durch Kommas getrennte Zeichenfolge der Optionen, die Sie ebenfalls aufteilen können.

Ich würde auch vorschlagen, dass Sie auf die Website von ACF gehen und die Dokumentation durchgehen. Die meisten Fragen dieser Art werden dort ausführlich beantwortet, und der Entwickler ist auch in seinen Support-Foren aktiv.

BEARBEITEN: Wenn Sie möchten, dass die Liste der verfügbaren Optionen auf einer Seite zum Generieren einer dynamischen Abfrage ausgegeben wird, habe ich genau das Richtige. Dies ist ein Teil, den ich gestern erstellt habe, um eine Liste von Metawerten aus einem bestimmten benutzerdefinierten Feldschlüssel (mithilfe von ACF) abzurufen. Ich habe es ziemlich allgemein für dich gemacht. Es gibt einen weiteren Teil von JS für die Bearbeitung der Ajax-Anfrage und ein ziemlich kompliziertes Stück PHP, das die resultierenden Beiträge ausgibt. Ich kann diese nicht wirklich umschreiben - der JS ist ein Standard-WP-Ajax-Aufruf / eine Antwort mit Vorwärtsrichtung, und das PHP ist ein Durcheinander von bedingten Überprüfungen für die 12 verschiedenen ACF-Felder, die wir anzeigen (von denen 2 Repeater sind). Die Grundlagen sind dieser Code hier, die Schaltfläche onClickruft die Ajax-Funktion in einer separaten JS-Datei auf, und das PHP für die Ajax-Funktion selbst erstellt im Wesentlichen ein Array von Argumenten für die Abfrage.$selectedOptionoder $_POST['option']als meta_value. Das wird a zugeführt new WP_Query( $args );, das dann in einer Schleife verwendet wird, deren Ausgang über add_action('wp_ajax_the_ajax_hook', 'fetch_option_list');und zu js zurückgeführt wird add_action( 'wp_ajax_nopriv_the_ajax_hook', 'fetch_option_list' ); //for non logged-in users.

 // Get list of meta_values for given meta_key and post_type (page, post, custom post type)
 function meta_list($key = '', $type = '', $status = 'publish'){
 global $wpdb;
    $r = $wpdb->get_col($wpdb->prepare( "
    SELECT DISTINCT pm.meta_value FROM {$wpdb->postmeta} pm
    LEFT JOIN {$wpdb->posts} p ON p.ID = pm.post_id
    WHERE pm.meta_key = '%s'
    AND p.post_status = '%s'
    AND p.post_type = '%s'
    ORDER BY pm.meta_value ASC", $key, $status, $type));
    return $r;
}

 // ADD EG A FORM TO THE PAGE
 function meta_ajax_frontend(){
    $formlist = meta_list('metakey', 'posttype');
    echo '<form id="optionSelect">';
    echo '<select id="optionList" name="optionList">';
    foreach($formlist as $fl => $val) {
        echo '<option>' . $val . '</option>';
    }
    echo '</select>';
    echo '<input name="action" type="hidden" value="the_ajax_hook" />
    <input id="submit_button" value = "Search" type="button" onClick="fetch_meta();" />
    </form>
    <div id="meta_list">
    Please select an option from the list
    </div>';
 }

Mm, wenn ich das mache, gebe ich die dem "Beitrag" zugewiesenen Optionen aus. Ich muss alle Optionen auf einer "Seite" als vollständige Liste der Optionen anzeigen.
Bob

Ich bin gespannt, warum Sie die Optionsliste des Backends im Frontend benötigen. Möchten Sie nur die Optionsliste mit den im ausgewählten Administrator ausgewählten Elementen anzeigen? Wenn Sie versuchen, dies als Teil eines Formulars zu verwenden (wodurch der Benutzer die überprüften Daten ändern kann), ist dies nicht das richtige Plugin oder die richtige Methode, um dies zu tun. Wenn Sie jedoch möchten, dass die Optionsliste als Vorfilter zum Umschreiben der Abfrage verwendet wird, habe ich möglicherweise genau das Richtige für Sie. Ich werde meinen obigen Beitrag in Kürze mit diesem Code hier bearbeiten.
SickHippie

Hallo ich bin Bob mit einem anderen Zugang, ich brauche die Optionen des Backends, um eine Art "Menü" mit ihnen zu erstellen. Ich denke, dass Ihr Code Beiträge und die ihnen zugewiesenen Optionen abruft. Ich brauche nur die Liste der Optionen, wie sie im Backend angezeigt wird, wenn Sie einen Beitrag erstellen. Ich werde weiter mit Ihrem Code arbeiten, um zu sehen, ob ich etwas herausfinden kann. Danke @SickHippie
Dunning-Kruger

Nein, es wird die Liste der Optionen abgerufen, die aus diesem Kontrollkästchen ausgewählt wurden. Das heißt, es wird "Hier ist das Kontrollkästchen, es gibt Beiträge, denen die Werte" Option 1 "," Option 2 "," Option 4 "zugewiesen wurden. und so weiter. Es wird buchstäblich nur die meta_value-Liste basierend auf diesem meta_key abgerufen. Ich brauchte sie für eine dynamische Liste, aber wenn Sie einen Entwurf für einen Beitrag erstellt haben, werden alle Kontrollkästchen aktiviert, und es werden alle Optionen in einem Array für Sie abgerufen. Das ist das Array Ich benutze die, foreachum durchzuschleifen. Die späteren Funktionen bringen die Liste der Beiträge über Ajax, aber ich habe das Bit
weggelassen
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.