如何在yairEO/tagify中实现基于用户标签的动态白名单?
Hey there! Let's get that dynamic tag whitelist sorted for your Tagify setup in your PHP & MySQL WordPress project. The core issue here is connecting your wp_postmeta tag data to the frontend Tagify configuration—let's break this down step by step.
Step 1: Fetch Tags from wp_postmeta with WordPress-safe PHP
First, we need to pull the stored tags from your database using WordPress's built-in $wpdb class (this avoids SQL injection risks and works seamlessly with WordPress's database structure).
Assuming your tags are stored under a meta key like user_tags (adjust this to match your actual meta key), here's the PHP to fetch and process them:
<?php global $wpdb; // Replace with your actual meta key from wp_postmeta $target_meta_key = 'user_tags'; // Query to get all distinct tag entries from the meta field $tag_entries = $wpdb->get_col( $wpdb->prepare( "SELECT DISTINCT meta_value FROM {$wpdb->prefix}postmeta WHERE meta_key = %s", $target_meta_key ) ); // Process entries into a flat list of tags $dynamic_whitelist = []; foreach ($tag_entries as $entry) { // If tags are stored as a comma-separated string (adjust if using serialized arrays) $tags_from_entry = explode(',', trim($entry)); $dynamic_whitelist = array_merge($dynamic_whitelist, $tags_from_entry); } // Clean up: remove duplicates and empty values $dynamic_whitelist = array_unique(array_filter($dynamic_whitelist)); // Convert to JSON for frontend use $whitelist_json = json_encode($dynamic_whitelist); ?>
Step 2: Update Tagify Script to Use the Dynamic Whitelist
Now inject the PHP-generated JSON into your Tagify initialization code, replacing the empty whitelist array with your dynamic tag data:
<script type="text/javascript"> jQuery(document).ready(function(){ var input = document.querySelector("#keywords"), // Pull the dynamic tags from our PHP-generated JSON tagWhitelist = <?php echo $whitelist_json; ?>; tagify = new Tagify(input, { enforceWhitelist : false, // Set to true if you want to restrict tags to only whitelist entries pattern : '', whitelist: tagWhitelist, blacklist:[], maxTags: 20, dropdown: { maxItems: 20, classname: "tags-look", enabled: 1, // Enable dropdown to show tag suggestions closeOnSelect: false, highlightFirst: true } }) }); </script>
Quick Tips to Tweak for Your Setup:
- Meta Key Match: Double-check that
$target_meta_keymatches the exact meta key stored in yourwp_postmetatable. - Tag Storage Format: If your tags are saved as serialized arrays instead of comma-separated strings, replace
explode(',', trim($entry))withunserialize($entry). - Enforce Whitelist: Toggle
enforceWhitelist: trueif you want to block users from adding tags not in your whitelist. - Performance: For large datasets, add a
LIMITclause to the SQL query or cache the results to speed up page loads.
内容的提问来源于stack exchange,提问作者Nicolas Reyes Gomez

