2016-12-22 4 views
5

Je rencontre un problème où shortcode ne se fait l'écho et non exécutés à savoir ici est ce que je vois en fait sur ma page web:Shortcodes et javascript inclusion

[ajax_filter_posts per_page = "10"]

Voici mon fichier function.php http://termbin.com/v6v5

//enqueue and localizing the Javascript. 

function assets() { 
    wp_enqueue_script('ajax_filter_post_mdu', get_template_directory_uri() . '/js/ajax-filter-posts.js', ['jquery'], null, true); 
    wp_localize_script('ajax_filter_post_mdu', 'bobz', array(
     'nonce' => wp_create_nonce('bobz'), 
     'ajax_url' => admin_url('admin-ajax.php') 
    )); 
} 
add_action('wp_enqueue_scripts', 'assets', 100); 

Voici comment j'appelle le shortcode dans ma catégorie template.php 012 personnelle

<?php echo do_shortcode('[ajax_filter_posts per_page="10"]'); ?> 

D'après ce que je comprends que je fais quelque chose de mal, peut-être autour du enqueue et ou la localisation, mais je ne comprends pas où est l'erreur. En outre, le javascript se charge correctement car le navigateur ne se plaint pas du fichier introuvable.

également dans mon fichier category.php modèle i appelle directement la fonction comme celui-ci par exemple:

<?php $a = array('post_tag', false, false); 
     $pub_tag = vb_filter_posts_sc($a); 
     echo $pub_tag; 
?> 

Il fonctionne correctement ...

J'ai bifurqué 2016 Wordpress thème intégré et pirater à partir de là, est-ce que j'ai un conflit quelque part?

J'ai cherché autant que je pourrais mais je ne peux pas l'obtenir trié.

+1

puis-je voir le code où vous avez utilisé le shortcode, peut-être dans votre fichier modèle? – Yamu

+0

Pouvez-vous poster les parties essentielles de votre code dans la question – Panda

+0

J'ai modifié mon message avec le lien approprié pour le fichier de modèle de catégorie. –

Répondre

0

Vous n'avez pas enregistré le code où votre shortcode est défini. Il ressemblerait à add_shortcode('ajax_filter_post', ...). Vous n'avez pas indiqué si vous fournissez le shortcode ou si c'est dans un plugin dont vous n'êtes pas responsable.

Vous pouvez voir ce que sont shortcodes définis comme suit:

global $shortcode_tags; 
print_r($shortcode_tags); 

Ce sera (devrait) vous donner un tableau avec tous les shortcodes définis. Si ajax_filter_post n'apparaît pas dans cette liste, votre shortcode n'est pas défini.

Selon l'emplacement de ce contenu, vous pouvez rencontrer un problème avec l'ordre des filtres. Autrement dit, tout ce qui est en expansion ce code court peut fonctionner après wp_enqueue_scripts déjà exécuté. Si cela arrive votre code JS ne le fera jamais au navigateur. La solution pour cela serait de mettre en file d'attente le JS sur chaque page et de l'utiliser seulement quand quelque chose avec votre shortcode apparaît. Par exemple, le shortcode pourrait générer ce code HTML:

<div class="my-shortcode-target"></div> 

Et jQuery quelque chose comme ceci:

jQuery(() => { (($) => { 
    $('.my-shortcode-target').each(() => { 
     var $target = $(this); 
     $.ajax({'url': bobz.ajax_url, 'data': { 'nonce': bobz.nonce } }).done((data) => { 
      // Here's where you can do stuff using what was returned from your AJAX call. 
      target.append($('<span>').text(data.answer)); 
     }); 
    }); 
})(jQuery); }); 

Votre shortcode semble filtrer quelque chose, de sorte que vous souhaitez remplacer la manipulation DOM là-bas avec la chose qui décide quoi montrer et quoi ne pas montrer.

+0

Réponse parfaite! Maintenant je l'ai eu n'a pas "add_shortcode"! –