J'ai du code qui génère une liste déroulante de tous mes fichiers post
. J'aimerais ajouter ce menu déroulant en haut de chaque page de message, juste avant le contenu du message.
Quelle est la bonne action/action pour le faire?
custom-functions.php:
<?php
function create_post_dropdown($titles){
?>
<div id="article-choice">
<h3>Choose an Article, or browse below</h3>
<select onchange="if (this.value) window.location.href=this.value">
<?php
foreach($titles as $title => $url){
echo "<option value=" . $url . ">" . $title . "</option>";
}
?>
</select>
</div>
<?php
}
add_action('__after_header', 'create_post_dropdown');
function add_dropdown_to_posts(){
$args = [
'post_type' => 'post',
'post_status' => 'publish',
'posts_per_page' => -1
];
$posts = new WP_Query( $args );
$titles = get_post_titles($args);
if (get_post_type() == "post"){
$title = $post->post_title; // get_the_title();
$title = create_post_dropdown($titles) . "<br>" . $title;
}
return $title;
}
add_filter('the_content', 'add_dropdown_to_posts');
L'idée est que lorsqu'une page post
est ouverte/affichée, cette liste déroulante (créée via create_post_dropdown
) sera ajoutée avant le contenu de l'article.
Une façon de le faire est d’avoir la fonction déroulante personnalisée return
le code HTML personnalisé. Ensuite, vous pouvez l'appeler dans votre add_dropdown_to_posts
et placer le contenu renvoyé dans une variable d'assistance. Ensuite, ajoutez simplement le code HTML personnalisé à la variable $content
fournie par le filtre the_content .
Comme ça,
function my_custom_dropdown_html() {
return '<html stuff here>'; // you could put your html also in a variable and then return that.
}
function add_dropdown_html_before_the_content($content) {
$dropdown = my_custom_dropdown_html();
// if statement just to be safe - e.g you change the custom function output to something else than string of html and forget you've used it here
if ( $dropdown && is_string( $dropdown ) ) {
$content = $dropdown . $content; // prepend custom html to content
}
return $content;
}
add_filter( 'the_content', 'add_dropdown_html_before_the_content' );