Le code suivant masque la sortie "the_content"
add_filter( "the_content", "cp_module_pcontent_post_content" );
function cp_module_pcontent_post_content($content){
global $post;
global $cp_module_pcontent_hide;
if(!in_array($post->ID,(array)$cp_module_pcontent_hide)){
return $content;
}
$c = '<p>' . get_option('cp_module_pcontent_text_pay') . '</p>';
$c .= apply_filters('cp_module_pcontent_post_content_'.$post->ID, '');
$c .= '<form method="post">';
$c .= '<input type="hidden" name="cp_module_pcontent_pay" value="'.$post->ID.'" />';
$c .= '<p><input type="submit" value="'.get_option('cp_module_pcontent_text_button').'" /></p>';
$c .= '</form>';
if(!is_user_logged_in()){
$c = get_option('cp_module_pcontent_text_logout');
}
$c = str_replace('%points%',cp_formatPoints(get_post_meta($post->ID,'cp_pcontent_points', 1)),$c);
return $c;
}
Vérifiez ces captures d'écran.
Si l'utilisateur non connecté l'affiche,
Si l'utilisateur connecté l'affiche comme ceci
Veuillez noter que seule la sortie the_content
est masquée
Voici mon problème. J'utilise le plugin champs magiques. C'est un plugin pour créer des champs personnalisés.
Par exemple, voici le code utilisé par mon fichier single.php.
<div class="entry-content">
<?php the_content(); ?>
</div>
<!-- magic fields plugin code starts -->
<div class="custom-content">
<?php if (function_exists('get_field')) {
$requirements = get_field('requirements_requirements');
if($requirements){
foreach($requirements as $requirement){
echo $requirement;
}
}
} ?>
</div>
<!-- magic fields plugin code ends -->
La sortie du plugin Magic fields n'est pas cachée ici
Je souhaite masquer la sortie du plugin Champs magiques au lieu de la sortie the_content
. Je veux dire requirements
au lieu de the_content
.
Quand je remplace "the_content" par "the_title", il cache le titre.
Par exemple comme ça
add_filter ("the_title", "cp_module_pcontent_post_content"); // cache le titre
add_filter ("the_tags", "cp_module_pcontent_post_content"); // cache les tags
add_filter ("wp_list_categories", "cp_module_pcontent_post_content"); // cache des catégories
add_filter ("???????", "cp_module_pcontent_post_content"); // cache un groupe de champs magiques
Pour masquer ces exigences, je dois remplacer
add_filter( "the_content", "cp_module_pcontent_post_content" );
à
add_filter( "xxxxxxxx", "cp_module_pcontent_post_content" );
Pouvez-vous me dire quelle est cette xxxxxxxx
?
Merci
OK j'ai trouvé la réponse. Merci à @ t31os et son code .
C'est ce que j'ai fait.
Remplacé cette ligne
echo $requirement;
avec
echo apply_filters('requirement','$requirement');
Et puis encore j'ai remplacé cette première ligne
add_filter( "the_content", "cp_module_pcontent_post_content" );
avec
add_filter( "requirement", "cp_module_pcontent_post_content" );
Voila sa fonctionne parfaitement maintenant. :)
Puisque les champs personnalisés sont conservés dans la table meta, vous pouvez probablement simplement supprimer cette ligne:
$c = str_replace('%points%',cp_formatPoints(get_post_meta($post->ID,'cp_pcontent_points', 1)),$c);
Vous pouvez également utiliser un booléen en tant que paramètre pour ne pas exécuter cette ligne de code.
HTH