Одна функция javascript работает вне файла цикла, другая - нет - PullRequest
0 голосов
/ 31 августа 2018

BBpress использует loop-single-reply.php и content-single-topic.php для отображения страницы внутри темы. Я отредактировал оба файла для дополнительной функциональности.

Все работает как надо, но я не перестаю удивляться, почему мне нужно разместить одну функцию javascript внутри файла loop-single-reply.php, а другую - в content_single_topic.php

Это код, с которым я работаю, loop-single-reply.php:

<button class="button-best-like" onClick="return shareMeta('<?php echo $correct_link; ?>', '<?php echo $fb_excerpt; ?>', 'fb-image-<?php echo $reply_id; ?>'); ga('send','event','Facebook','share','like', 0)">
<i class="fa fa-facebook-official" aria-hidden="true" title="Share on Facebook"></i>
</button>

<script>
function shareMeta(link, description, replyId) {
    var title           = '<?php echo $fb_title; ?>';
    var replyImages     = document.getElementById(replyId).getElementsByTagName('img');
    var defaultImage    = '/uploads/2017/12/Hero-image.jpg';
    var result;
    if (replyImages.length > 0) {
        for(var i=0, l=replyImages.length; i<l; i++) {
            if(replyImages[i].height >= 200 && replyImages[i].width >= 200) {
                result = i;
                break;
            }
        }
        if (result == null) {
            var image = defaultImage;
        } else {
            var image = replyImages[result].src;
        }
    } else {
        var image = defaultImage;
    }
    shareOverrideOGMeta(link, title, description, image);
}
</script>

И код content-single-topic.php

<script>
function shareOverrideOGMeta(overrideLink, overrideTitle, overrideDescription, overrideImage) {
    FB.ui({
        method: 'share_open_graph',
        action_type: 'og.likes',
        action_properties: JSON.stringify({
            object: {
                'og:url': overrideLink,
                'og:title': overrideTitle,
                'og:description': overrideDescription,
                'og:image': overrideImage
            }
        })
    });
}
</script>

Когда я пытаюсь поместить функцию shareMeta в content-single-topic.php, все перестает работать. Поэтому я должен поместить его в loop-single-reply.php для работы. Но в этом случае функция печатается 15 раз, что кажется немного нет необходимости.

Как получилось? Есть ли способ лучше? Имейте в виду, что это моя первая попытка javascript, поэтому, возможно, есть лучший способ.

...