plugin = $plugin; $this->settings = $settings; $this->taxonomies = $this->settings['article']['taxonomies']; foreach ( $this->taxonomies as $taxonomy ) { // Dynamic hook: {taxonomy}_edit_form & edit_{taxonomy} add_action( "{$taxonomy}_edit_form", array( $this, 'form' ), 10, 1 ); add_action( "edit_{$taxonomy}", array( $this, 'save' ), 10, 1 ); } } /** * Function to prepare variables and render Category metabox fields for Head & Footer Code. * * @param object $term_object Taxonomy term object. * @return void */ public function form( $term_object ) { // Get taxonomy definition $taxonomy_obj = get_taxonomy( $term_object->taxonomy ); // Get taxonomy label $taxonomy_label = ( $taxonomy_obj && isset( $taxonomy_obj->labels->singular_name ) ) ? $taxonomy_obj->labels->singular_name : esc_html__( 'taxonomy', 'head-footer-code' ); // Get taxonomy name $term_name = $term_object->name; // or $term_object->slug /** @var string $form_scope Used in templates/hfc-form.php */ $auhfc_form_scope = esc_html( "{$term_name} {$taxonomy_label} " ) . esc_html__( 'specific', 'head-footer-code' ); $auhfc_security_risk_notice = Common::get_security_risk_notice(); $term_id = isset( $term_object->term_id ) ? (int) $term_object->term_id : 0; $taxonomy = isset( $term_object->taxonomy ) ? (string) $term_object->taxonomy : 'category'; // Get taxonomy specific termmeta. /** @var array $auhfc_form_data Used in templates/hfc-form.php */ $auhfc_form_data = array( 'behavior' => Common::get_term_meta( 'behavior', $term_id ), 'head' => Common::get_term_meta( 'head', $term_id ), 'body' => Common::get_term_meta( 'body', $term_id ), 'footer' => Common::get_term_meta( 'footer', $term_id ), ); // Render nonce and form. wp_nonce_field( $this->get_nonce_action( $taxonomy ), $this->get_nonce_name( $taxonomy ) ); echo '
'; } /** * Function to update taxonomy meta */ public function save( $term_id ) { if ( ! isset( $_POST['auhfc'] ) ) { return; } // Get taxonomy from form. $taxonomy = isset( $_POST['taxonomy'] ) ? sanitize_text_field( $_POST['taxonomy'] ) : ''; // Bail if current taxonomy is not among allowed in plugin settings. if ( ! in_array( $taxonomy, $this->taxonomies, true ) ) { return; } // Verify nonce. $nonce = isset( $_POST[ $this->get_nonce_name( $taxonomy ) ] ) ? sanitize_text_field( wp_unslash( $_POST[ $this->get_nonce_name( $taxonomy ) ] ) ) : ''; // Verify nonce and user capabilities if ( empty( $nonce ) || ! wp_verify_nonce( $nonce, $this->get_nonce_action( $taxonomy ) ) ) { return; } // Dynamic capability check $tax_obj = get_taxonomy( $taxonomy ); if ( ! $tax_obj || ! current_user_can( $tax_obj->cap->edit_terms, $term_id ) ) { return; } // Maybe delete HFC for this taxonomy? if ( ! isset( $_POST['auhfc'] ) ) { delete_term_meta( $term_id, $this->plugin->meta_key ); return; } // Sanitize data and update term meta. $data = Common::sanitize_hfc_data( $_POST['auhfc'] ); update_term_meta( $term_id, $this->plugin->meta_key, wp_slash( $data ) ); } /** * Generates the nonce field name for a given taxonomy. */ private function get_nonce_name( $taxonomy ) { return "auhfc_{$taxonomy}_nonce"; } /** * Generates the nonce action string for a given taxonomy. */ private function get_nonce_action( $taxonomy ) { return "auhfc_{$taxonomy}_save_action"; } }