web-dev-qa-db-fra.com

Comment afficher les entrées dans une taxonomie personnalisée par auteur?

J'ai un site Web que je construis pour que les gens écrivent leurs propres livres. J'ai une taxonomie personnalisée pour cela, des livres étiquetés.

J'ai maintenant besoin d'un lien ou d'une liste déroulante contenant tous les auteurs du site, afin que les lecteurs puissent voir tous les livres créés par chaque auteur (les profils affichent tous les messages , mais aucune entrée de taxonomie personnalisée). J'ai essayé de faire quelque chose pour faire cela (via un widget), mais je ne connais pas vraiment php du tout et n'ai rien obtenu (je connais à peine le langage HTML non plus). La raison pour laquelle j'en ai besoin dans un widget est parce que le thème que je suis utilise réinitialise les fichiers php chaque fois qu'il est mis à jour, ce qui signifie que je ne peux rien y ajouter ni même y apporter des modifications (même si je savais comment faire).

Question: Existe-t-il un moyen de:

  1. Créez une liste d’auteurs avec mise à jour automatique (page, liste déroulante, etc.).
  2. Demandez à ces auteurs, lorsque vous cliquez dessus, d'afficher une liste des termes qu'ils ont créés au sein d'une taxonomie personnalisée spécifique (j'ai plusieurs taxonomies personnalisées, je dois donc pouvoir spécifier).

Je réalise que la procédure automatique consiste probablement à commencer à éditer les fichiers php du thème, mais rappelez-vous que je ne peux pas le faire. J'ai besoin de quelque chose que je puisse mettre dans un widget (comme du HTML dans un widget texte) ou dans une sorte de page vers laquelle je peux créer un lien.

Exemple:

J'ai la taxonomie personnalisée de "livres". L'auteur A fabrique les livres "Un" et "Deux". L'auteur B fait les livres "Trois" et "Quatre". Idéalement, je voudrais un pulldown quelque part qui répertorie tous les auteurs. Ce pulldown se met automatiquement à jour, donc si un autre auteur se joint, je n'ai pas besoin d'entrer manuellement et de l'ajouter au pulldown.

La liste déroulante répertorie l'auteur A et l'auteur B, parmi d'autres. Si l'on clique sur l'auteur A, il devrait pouvoir voir tous les livres écrits par l'auteur A et cliquer dessus pour les consulter. Il en va de même pour l'auteur B.

1
Thomas Myron

Eh bien, lorsque vous devez modifier un thème, vous créez un "thème enfant". Il y a de bonnes instructions pour comment ici .

Nous allons donc simplement créer une copie sécurisée du code modifié dans un dossier que l’autre thème n’écrasera pas.

Ce que je pense que vous voulez faire est de créer un type de message personnalisé "Livre" et d'enregistrer ce type de message dans une taxonomie de "Auteur". Voici un exemple:

function book_object() {
    register_post_type('book', array(
        'labels' => array(
            'name' => __('Books', 'textdomain'),
            'singular_name' => __('Book', 'textdomain'),
            'add_new' => __('Add New', 'textdomain'),
            'add_new_item' => __('Add New Book', 'textdomain'),
            'edit_item' => __('Edit Book', 'textdomain'),
            'new_item' => __('New Book', 'textdomain'),
            'view_item' => __('View Book', 'textdomain')
        ),
        'description' => 'People like books.',
        'register_meta_box_cb' => 'book_fields',
        'public' => true,
        'menu_position' => 20,
        'supports' => array('title', 'editor', 'thumbnail',),
        'hierarchical' => true
    )
    );
}
    function book_fields() {
        add_meta_box('book_details', __('Book Details', 'textdomain'), 'book_fields_cb', 'book', 'normal', 'high');
        function book_fields_cb($post) {
            $value = get_post_meta($post->ID, 'pubdate', true);
            echo '<label for="pubdate">'.__('Publish date', 'textdomain').'</label><br />';
            echo '<input type="text" id="pubdate" name="pubdate" value="'.esc_attr($value).'" size="25" /><br />';
            $value = get_post_meta($post->ID, 'field_2', true);
            echo '<label for="field_2">'.__('More custom fields', 'textdomain').'</label><br />';
            echo '<input type="text" id="field_2" name="field_2" value="'.esc_attr($value).'" size="25" /><br />';
        }
    }

Cela crée l'objet Book.

Pour créer une taxonomie pour les auteurs:

function author_taxonomy() {
    $labels = array(
        'name'              => _x( 'Authors', 'taxonomy general name' ),
        'singular_name'     => _x( 'Author', 'taxonomy singular name' ),
        'search_items'      => __( 'Search Authors' ),
        'all_items'         => __( 'All Authors' ),
        'parent_item'       => __( 'Parent Author' ),
        'parent_item_colon' => __( 'Parent Author:' ),
        'edit_item'         => __( 'Edit Author' ),
        'update_item'       => __( 'Update Author' ),
        'add_new_item'      => __( 'Add New Author' ),
        'new_item_name'     => __( 'New Author' ),
        'menu_name'         => __( 'Authors' ),
    );
    $args = array(
        'hierarchical'      => true,
        'labels'            => $labels,
        'show_ui'           => true,
        'show_admin_column' => true,
        'query_var'         => true,
        'rewrite'           => array(
                                'slug' => 'authors',
                                'hierarchical' => true,
                                'with_front' => false
                            ),
    );
    register_taxonomy('author', array('book'), $args);
}

Ensuite, nous associons ces fonctions à Wordpress comme ceci:

add_action('init', 'my_init');
function my_init() {
    book_object();
    author_taxonomies();
}

Cette dernière partie est généralement placée en haut du fichier. Certaines personnes déposent les lignes add_action sous les blocs de code qu'elles invoquent, mais j'aime imbriquer des appels d'action successifs en haut pour que tout soit clair pour moi.

Ce code va pratiquement tout seul dans un fichier appelé functions.php - sauf que vous ne mettez pas functions.php dans l'ancien dossier du thème.

Vous créez un nouveau dossier de thème, avec un nouveau style.css. Tout ce dont il a besoin, c'est le commentaire suivant en haut:

/*
 Theme Name:   My custom book portal
 Description:  Child theme of OLD-THEME-NAME
 Template:     OLD-THEME-SLUG
 Text Domain:  textdomain
*/

Alors maintenant, vous avez un nouveau dossier dans/wp-content/themes/qui peut être appelé tout ce que vous voulez. Il contient style.css et functions.php avec tout le code ci-dessus. Vous pouvez ajouter un fichier à ce dossier qui vous aidera maintenant à afficher les données. nous allons l'appeler taxonomy-book.php et le placer dans le dossier du thème de l'enfant.

Je vous suggère de commencer par copier tout le code du fichier taxonomy.php de votre thème actuel ou, si aucun fichier de ce type n'existe dans votre thème actuel, recherchez archive.php. Ces fichiers commenceront par presque tout ce que vous recherchez.

Comment amener les utilisateurs à cette page nous ramène à votre problème initial - le menu. Nous avons les données qu'il affichera maintenant, nous avons les pages vers lesquelles ses sélections seront liées - nous avons besoin du menu déroulant. J'aime simplement le mettre dans la navigation.

Dans Apparence-> Menus, vous pouvez désormais ajouter les éléments de taxonomie à n’importe quel menu de navigation à partir des zones de sélection WP situées à gauche du générateur de menus. Si vous souhaitez que je vous écrive un petit widget rapide à la place, je chercherai votre réponse.

2
adamlaughlin