Поддержка Плагины Плагин ajax изменения контента

  • Пытаюсь написать плагин для ajax замены всех вхождений одной цифры на другую.
    Javascript:

    var $ = jQuery;
    $(document).ready(function() {
    	$("#sub").click(function(){
    		$("#tekst").fadeOut(1000);
    		$.ajax({
    			url: rplc.ajax_url,
    			type: 'POST',
    			data: {
    					action : 'rplc_str',
    					rplc_from: $("#rplc_from").val(),
    					rplc_to: $("#rplc_to").val()},
    			success: function(response){  
                        $("#tekst").html(response);
    					$("#tekst").fadeIn(1000);
    			}
    		})
    	});
    });

    Файл плагина:

    add_action( 'wp_enqueue_scripts', 'ajax_test_enqueue_scripts' );
    function ajax_test_enqueue_scripts() {
    	if( is_single() ) {
    		wp_enqueue_style( 'rplc', plugins_url( '/inc/rplc.css', __FILE__ ) );
    	}
    	wp_enqueue_script( 'rplc', plugins_url( '/inc/rplc.js', __FILE__ ), array('jquery'), '1.0', true );
    	wp_localize_script( 'rplc', 'rplc', array(
    		'ajax_url' => admin_url( 'admin-ajax.php' )
    	));
    }
    
    add_filter( 'the_content', 'add_form', 99 );
    function add_form( $content ) {
    	$form = '';
    
    	//if ( is_single()&&is_user_logged_in() ) {
    		$form = '<div> Изменить с
    		<input type="number" size="2" id="rplc_from" min="-5" max="6" value="0">
    		на
    		<input type="number" size="2" id="rplc_to" min="-5" max="6" value="0">
    		<input value="Заменить" type="submit" id="sub">
    		</div><br/><div id="tekst">'; 
    	//}
    	return $form . $content.'</div>';
    }
    
    add_action( 'wp_ajax_nopriv_rplc_str', 'rplc_str' );
    add_action( 'wp_ajax_rplc_str', 'rplc_str' );
    
    function rplc_str() {
    	$replace_from = $_REQUEST['rplc_from'];
    	$replace_to = $_REQUEST['rplc_to'];	
    	if ( defined( 'DOING_AJAX' ) && DOING_AJAX ) {
    		echo 'Будет изменены все "'.$replace_from.'" на "'.$replace_to.'"<br/>';
    		echo 'Измененный контент: <br/>'.$content;
    		die();
    	}
    }

    Пока такой вопрос: Почему $content пустой? Все ли правильно я делаю?

Просмотр 10 ответов — с 1 по 10 (всего 10)
  • Дебажить надо каждый логический шаг: Что приходит в js, что готово к отправке, что получает обработчик и так по строкам все ниже и ниже.
    Написание кода это процентов 30 от всей работы. Основное — планирование архитектуры, отладка и тестирование.

    Даже без js, если просто добавить фильтр:

    echo $content;
    add_filter( 'the_content', 'add_form', 99 );
    function add_form( $content ) {
    	$form = '';
    		$form = '<div> Изменить с
    		<input type="number" size="2" id="rplc_from" min="-5" max="6" value="0">
    		на
    		<input type="number" size="2" id="rplc_to" min="-5" max="6" value="0">
    		<input value="Заменить" type="submit" id="sub">
    		</div><br/><div id="tekst">'; 
    	return $form.$content.'</div>';
    }

    Почему echo $content; ничего не выводит?

    А почему она у вас за пределами функции?

    Чтоб проверить $content
    Тогда что, весь код плагина должен быть внутри одной функции?

    • Ответ изменён 6 лет, 3 месяца назад пользователем spotup.

    вы, наверное, слабо себе представляете работу wordpress, да и php в частности.
    $content в данном контексте всегда будет пустым.

    хотите проверять — проверяйте внутри функций, где $content определен.

    Модератор Sergey Biryukov

    (@sergeybiryukov)

    Live and Learn

    Тогда что, весь код плагина должен быть внутри одной функции?

    Нет, но стоит разобраться с областью видимости переменных в PHP.

    вы, наверное, слабо себе представляете работу wordpress, да и php в частности.
    $content в данном контексте всегда будет пустым.

    хотите проверять — проверяйте внутри функций, где $content определен.

    Да, я новичок.
    А как мне вывести $content (пока не измененный) после работы js?

    add_action( 'wp_ajax_nopriv_rplc_str', 'rplc_str' );
    add_action( 'wp_ajax_rplc_str', 'rplc_str' );
    
    function rplc_str() {
    	$replace_from = $_REQUEST['rplc_from'];
    	$replace_to = $_REQUEST['rplc_to'];	
    	if ( defined( 'DOING_AJAX' ) && DOING_AJAX ) {
    		echo 'Будет изменены все "'.$replace_from.'" на "'.$replace_to.'"<br/>';
    		echo 'Пока не измененный контент: <br/>'.$content;
    		die();
    	}
    }

    Нет, но стоит разобраться с областью видимости переменных в PHP.

    Спасибо, я это читал, но выходит, что я не понял. Еще раз прочту.

    Я думал что, если в плагине просто написать одну единственную команду

    /*
    Plugin Name:
    Description:
    Version:
    Author:
    */
    
    echo "Это текст с плагина ".$content;
    

    то он сработает, оказывается не так.
    Можете дать ссылку по области видимости в плагинах WP?

    • Ответ изменён 6 лет, 3 месяца назад пользователем spotup.

    Можете дать ссылку по области видимости в плагинах WP?

    Какая ссылка по ВП? Это php основы. Вы думаете магия ВП это другой язык программирования с своими правилами?

    Как можно передать $content в функцию rplc_str()?

Просмотр 10 ответов — с 1 по 10 (всего 10)
  • Тема «Плагин ajax изменения контента» закрыта для новых ответов.