Frontend-Tagging für Standard-und benutzerdefinierten Post-Typ in WordPress

WordPress Backend (Post-Editor-Panel) bietet ein so hervorragendes Tagging-Tool, bei dem wir aus bereits vorhandenen Tags auswählen können. Ist es möglich, diese functionalität ohne Fancy Ajax in das Frontend zu bringen? Nur mit ein paar guten ol php. Alles, was ich brauche, ist nur eine Liste von Tags, aus denen ich im Frontend auswählen und speichern kann. Ich brauche die functionalität für beide Post-Typen, Standard-WP-Post-Typ sowie für benutzerdefinierte Post-Typ.

Es gibt eine ähnliche Frage mit einer nicht akzeptierten Antwort. Ich habe versucht, den Code in der vorgeschlagenen Antwort zu verwenden, aber es ist bei weitem nicht perfekt und gibt nur leere Radio-Buttons zurück. Es gibt nichts auf Google zu diesem Thema, bitte schlagen Sie die Korrektur im Code vor. Vielen Dank.

 'name', 'order' => 'ASC', 'hide_empty' => false ); $terms = get_terms($taxonomies,$args); if (count($terms) > 0): $i = 0; foreach ($terms as $term): ?> 
<input type="radio" value="term_id; ?>" name="wissen_tags" class="wissen_tag_list_ckb" checked>

Solutions Collecting From Web of "Frontend-Tagging für Standard-und benutzerdefinierten Post-Typ in WordPress"

Hinweis: Code nach Aktualisierung der OP vollständig aktualisieren.

Vorausgesetzt, Sie möchten die Taxonomie “post_tag” (die Standard-Tags) für die Standardpost und eine Taxonomie mit dem Namen “research-sections” für einen benutzerdefinierten Posttyp namens “research” aktualisieren.

Wahrscheinlich musst du das Formular sowohl in single.php als auch in single-research.php single.php und in beiden musst du ein paar Sachen haben … weil es immer besser ist, einen DRY-Code zu haben, und WP immer besser, halte die Vorlagen sauber, ich Ich schlage vor, dass Sie den gesamten functionscode in ein Plugin oder in functions.php einfügen und so wenig wie möglich die Vorlagen ändern.

Sie benötigen im Wesentlichen 2 functionen: eine, die das Formular ausgibt, eine andere, die Daten speichert.

Für den ersten können Sie Ihre eigene Aktion erstellen, auf diese Weise in der Vorlage nur, was Sie brauchen, ist ein Aufruf do_action .

Für die function, die Daten speichert, können Sie eine Standard-WP-Aktion wie init haken.

Der Code:

 add_action('init', 'frontend_term_assignment'); add_action('frontend_term_assignment_form', 'frontend_term_assignment_form'); function frontend_term_assignment() { if ( ! isset($_POST['term_assignment_post_id']) || ! intval($_POST['term_assignment_post_id']) || ! current_user_can('edit_posts', $_POST['term_assignment_post_id']) || ! isset( $_POST['term_assignment_nonce'] ) || ! wp_verify_nonce($_POST['term_assignment_nonce'], 'frontend_term_assignment') ) return; $post = get_post( $_POST['term_assignment_post_id'] ); $taxonomy = null; if ( $post->post_type == 'post' ) { $taxonomy = 'post_tag'; } elseif ( $post->post_type == 'research' ) { $taxonomy = 'research-sections'; } if ( empty($taxonomy) || ! isset($_POST[$taxonomy]) ) return; $terms = $_POST[$taxonomy]; wp_set_object_terms( $post->ID, $terms, $taxonomy, false); } function frontend_term_assignment_form() { $post = get_queried_object(); if ( empty($post) || ! isset($post->ID) || ! current_user_can('edit_posts', $post->ID) ) return; $taxonomy = null; if ( $post->post_type == 'post' ) { $taxonomy = 'post_tag'; } elseif ( $post->post_type == 'research' ) { $taxonomy = 'research-sections'; } if ( empty($taxonomy) ) return; $tax_obj = get_taxonomy($taxonomy); $args = array('orderby' => 'name', 'order' => 'ASC', 'hide_empty' => false ); $terms = get_terms($taxonomy, $args); $post_terms = (array)wp_get_object_terms( $post->ID, $taxonomy, array("fields" => "ids") ); if ( ! empty($terms) ) { echo '
'; echo ''; echo ''; echo '
    '; foreach ($terms as $term ) { $checked = in_array($term->term_id, $post_terms) ? checked(1, 1, 0) : ''; printf('
  • ', $term->slug, $taxonomy, $checked); } echo '
'; echo '
'; } }

Ich habe Sicherheitsüberprüfung hinzugefügt, wie die aktuellen Benutzerfunktionen überprüfen und eine Nonce-Prüfung durchführen.

Fast alle Arbeiten sind erledigt.

single.php nun in den Templates (sowohl single.php als auch single-research.php ) einfach die do_action nach Ihrer Schleife hinzu:

 < ?php while ( have_posts() ) : the_post(); ?> ...Your loop code here ... < ?php endwhile; ?> < ?php // Nothing else is required here! do_action('frontend_term_assignment_form'); ?> 

Das ist alles. Ich hoffe es hilft.