web-dev-qa-db-fra.com

Comment ajouter une action personnaliser_enregistrement APRÈS l'ajout d'une taxonomie personnalisée

personnaliser_register ne fonctionne qu'avec le hook personnaliser_register, et quel que soit le crochet que j'utilise pour ajouter la taxonomie personnalisée, cela se produit toujours après la personnalisation_register.

(Je souhaite parcourir la liste des termes de ma taxonomie personnalisée pour créer des catégories et des options personnalisées pour chaque terme)

MODIFIER:

Voici le code dilué en question de mon fichier de fonctions de modèle:

register_taxonomy( 'brand', $object_types, $args );
add_action( 'muplugins_loaded', 'brand', 0 );
// ????? What Hook can I use here^ that will run before the 'customize_register' hook ????? //

function iartz_customize_register( $wp_customize ) {
    $brands = get_terms('brand');
    foreach($brands AS $brand){
        //Add color options for each term of taxtonomy 'brand'
    }
}
add_action( 'customize_register', 'iartz_customize_register' );
2
Geoffrey Burdett

Autant que je sache, il ne devrait pas être un problème d’obtenir des données de taxonomie à l’état de raccordement customizer_register. Ce problème peut donc avoir différentes raisons, mais cela ne ressort pas de votre question. De plus, je ne suis pas sûr de ce que vous essayez d'atteindre, alors vous voudrez peut-être combler les lacunes d'informations en fonction des questions de @Rarst. En plus de cela, il existe de nombreuses méthodes pour, par exemple, ajouter une liste déroulante de taxonomie au personnalisateur. J'ai choisi l'une d'elles et en ai lié une autre, voir ci-dessous.


Avertissement:
Ce n’est pas mon code, je l’ajoute ici pour des raisons de complétude, des liens vers la source sont ajoutés. Je n'ai pas essayé moi-même, mais pour autant que je sache, il n'y a rien de mal à ça et ça marche pour les gens.


Code pour la liste de taxonomie pour le personnalisateur de thème

Source chez Gist
→ d'après blog article par Eric Juden

Cela va dans le functions.php

add_action('customize_register', 'my_customize_register');
function my_customize_register($wp_customize){
require_once(TEMPLATEPATH . '/class/wp_customizer_taxonomy_dropdown.php');

$wp_customize->add_section('my_theme_blog_featured_categories', array(
    'title' => __('Blog: Featured Categories'),
    'priority' => 36,
));

$wp_customize->add_setting('featured_category_1', array(
    'default' => get_option('default_category', ''),
));

$wp_customize->add_control( new Taxonomy_Dropdown_Customize_Control($wp_customize, 'featured_category_1', array(
    'label' => __('Featured Area 1'),
    'section' => 'my_theme_blog_featured_categories',
    'settings' => 'featured_category_1',
    'args' => array(), // arguments for wp_dropdown_categories function...optional. array('taxonomy' => 'my_taxonomy')
)));

return $wp_customize;
}

Cela va dans un fichier appelé wp_customizer_taxonomy_dropdown.php situé dans un dossier, situé par rapport au functions.php, appelé class:

class Taxonomy_Dropdown_Customize_Control extends WP_Customize_Control {
    public $type = 'taxonomy_dropdown';
    var $defaults = array();
    public $args = array();

    public function render_content(){
        // Call wp_dropdown_cats to ad data-customize-setting-link to select tag
        add_action('wp_dropdown_cats', array($this, 'wp_dropdown_cats'));

        // Set some defaults for our control
        $this->defaults = array(
            'show_option_none' => __('None'),
            'orderby' => 'name', 
            'hide_empty' => 0,
            'id' => $this->id,
            'selected' => $this->value(),
        );

        // Parse defaults against what the user submitted
        $r = wp_parse_args($this->args, $this->defaults);

?>
    <label><span class="customize-control-title"><?php echo esc_html($this->label); ?></span></label>
<?php  
        // Generate our select box
        wp_dropdown_categories($r);
    }

    function wp_dropdown_cats($output){
        // Search for <select and replace it with <select data-customize=setting-link="my_control_id"
        $output = str_replace('<select', '<select ' . $this->get_link(), $output);
        return $output;
    }
}

Cela devrait, avec les informations supplémentaires liées, être assez explicite.

Approche similaire supplémentaire

Contrôles personnalisés du personnaliseur de thème WordPress by @bueltge;
→ Lien vers source exemple de liste déroulante de taxonomie à Gist;
→ Sa réponse à propos de ce sujet;

→ Plusieurs tutoriels, articles et autres sont disponibles, vous les trouverez facilement vous-même si vous en avez besoin.

2
Nicolai

Réponse courte: les deux fonctions peuvent être raccordées à la commande custom_register et elles fonctionneront bien. Le crochet personnaliser_liste ne fonctionne que sur la page de personnalisation, mais j'ai besoin de la fonction register_taxonomy sur les deux pages. Donc, pour utiliser la fonction register_taxonomy sur un appel de page frontal, je l’ai aussi appelée sur le hook init.


"Donc, ce problème pourrait avoir des raisons différentes"

ialocin, tu as raison ...

Sans vouloir aller trop loin, je m'attendais à ce que le hook personnaliser_register appelle à chaque appel de page (parce que c'est ce que dit la documentation), mais ce n'est pas le cas, ce qui a complètement bouleversé mon approche.

Merci pour l'aide!

1
Geoffrey Burdett