Скрипт работает на каждом посте, но не на последнем посте - PullRequest
1 голос
/ 04 апреля 2020

Мой сценарий удаляет URL-адреса http: // и www from, отображаемые в содержимом сообщения, но по какой-то причине он влияет на все сообщения, кроме последнего или только на первое сообщение на странице, в зависимости от того, где я размещаю сценарий. .

Например, если он находится в l oop, он повлияет на все сообщения, кроме последнего, но если он находится за пределами l oop, он влияет только на первое сообщение.

Я ищу решение, чтобы оно влияло на все URL, отображаемые на странице. Любая помощь будет высоко ценится.

<?php 

        if (have_posts()) :
        while (have_posts()) : the_post(); ?>



            <Script>

            $(document).ready(function removeFunction() {
            let post_id = '<?php global $post; echo $post->ID; ?>';
              var str = document.getElementById("link" + post_id).innerHTML; 
              var res = str.replace(/^(?:https?:\/\/)?(?:www\.)?/i, "").split('/')[0];
              document.getElementById("link" + post_id).innerHTML = res;

            });

           </Script>



<p><?php the_content(); ?></p>
<!-- This is where the URL's are EX: <a id="link[return_post_id]" href="http://example.com/">http://example.com/</a> -->



<?php endwhile;

    else :
    echo '<p>No content found</p>';

    endif;

?>

Ответы [ 2 ]

1 голос
/ 04 апреля 2020

1.Вы пометили jQuery, поэтому поместите код jQuery вне l oop.

2. Он должен перебирать все <p> и делать то, что вы делаете.

3.Измените <p><?php the_content(); ?></p> на <p data-id="<?php global $post; echo $post->ID; ?>"><?php the_content(); ?></p> (внутри while l oop)

4.После выполнения вышеуказанных шагов измените код jQuery, как показано ниже:

<Script>

    $(document).ready(function() {
        $('p').each(function(){

            let post_id = $(this).data('id');
            var str = $(this).html(); 
            var res = str.replace(/^(?:https?:\/\/)?(?:www\.)?/i, "").split('/')[0];
            $(this).html(res);
        });

    });

</Script>
0 голосов
/ 04 апреля 2020

есть проблема, и это на смеси php и javascript. Ваш php код Generate JS Внутри L oop, в каждом l oop он создаст функцию с именем removeFunction () , и ваш интерпретатор браузера перепутал вещи. он заменит последний.

Есть 2 решения для вашей проблемы: во-первых, сделать эти функции такими, как эти:

$(document).ready(function removeFunction<?php echo $post->ID; ?>() {

это сделает имена функций как removeFunction1 () removeFunction2 () ...

Второй Sulotion должен определить функцию вне l oop, а в php l oop просто вызвать функцию следующим образом:

while (have_posts()) : the_post(); ?>
<script>
removeFunction(<?php global $post; echo $post->ID; ?>);

и определение вашей функции будет выглядеть так:

removeFunction(post_id){
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...