J'utilise ce plugin pour ajouter des balises à une page: http://wordpress.org/extend/plugins/post-tags-and-categories-for-pages/
Et j'ai ajouté la prise en charge des balises pour le message personnalisé:
function codex_custom_init() {
$args = array(
'public' => true,
'has_archive' => true,
'label' => 'Doing',
'taxonomies' => array('post_tag'),
'supports' => array( 'title', 'editor', 'thumbnail', 'excerpt')
);
register_post_type( 'doing', $args );
}
add_action( 'init', 'codex_custom_init' );
Est-ce possible de le faire dans chaque page avec une balise spécifique pour afficher les publications personnalisées associées ayant la même balise que la page? Comment puis-je charger sur la page les publications personnalisées liées aux balises?
J'ai essayé avec ce code mais ne montre aucun message lié:
<?php
$tags = wp_get_post_tags($post->ID);
if ($tags) {
echo 'Related Posts';
$first_tag = $tags[0]->term_id;
$args=array(
'tag__in' => array($first_tag),
'post__not_in' => array($post->ID),
'posts_per_page'=>5,
'caller_get_posts'=>1
);
$my_query = new WP_Query($args);
if( $my_query->have_posts() ) {
while ($my_query->have_posts()) : $my_query->the_post(); ?>
<a href="<?php the_permalink() ?>" rel="bookmark" title="Permanent Link to <?php the_title_attribute(); ?>"><?php the_title(); ?></a>
<?php
endwhile;
}
wp_reset_query();
}
?>
Vous devez spécifier un type de publication dans vos arguments WP_Query
lorsque vous devez interroger tout autre type de publication, acceptez la construction dans le type de publication post
.
Par défaut, post_type
est défini sur post
. Ainsi, si aucun type de publication spécifique n'est défini manuellement par l'utilisateur, WP_Query
interroge les publications du type de publication post
.
De plus, caller_get_posts
est obsolète depuis très longtemps. Si le débogage était activé, vous auriez reçu un avis de dépréciation à ce sujet. Les arguments corrects à utiliser sont ignore_sticky_posts
.
Je n’utiliserais pas non plus le $post
global car il n’est pas fiable. Pour des raisons de fiabilité, utilisez plutôt $GLOBALS['wp_the_query']->get_queried_object()
. Vous pouvez lire à ce sujet dans ma réponse ici
get_the_tags()
est également plus rapide que wp_get_post_tags()
car cette dernière nécessite un appel de base de données supplémentaire.
Une dernière note, wp_reset_query()
est utilisée avec query_posts
, la fonction correcte à utiliser avec WP_Query
est wp_reset_postdata()
Essentiellement, vous pouvez essayer ce qui suit
$post_id = $GLOBALS['wp_the_query']->get_queried_object_id();
$tags = get_the_tags( $post_id );
if ( $tags
&& !is_wp_error( $tags )
) {
$args = [
'post__not_in' => [$post_id],
'post_type' => 'doing',
'tag__in' => [$tags[0]->term_id],
// Rest of your args
];
$my_query = new WP_Query( $args );
// Your loop
wp_reset_postdata();
}
Mon premier point d’appel est d’appeler global $post;
- car cela vous permet d’utiliser $post->ID
... si vous l’utilisez, la prochaine étape consiste à afficher chaque partie séparément, par exemple.
print_r($tags);
echo $first_tag;
voir ce qui est affiché dans chaque partie, cela aidera à diagnostiquer le problème, car sans voir votre code fonctionner, nous ne pouvons pas dire pourquoi il ne fonctionne pas.