通过 select 在 JQuery/php 中编辑简码

Edit shortcode by select in JQuery/php

我有一个 table 短代码,应该根据 select 框中的值进行编辑,但我无法让它工作。我已经走了这么远:

简码语法:[table id=tableID filter="filterstring" \] 过滤器部分可能被省略。

html:

<div>
<select class="filter-products">
<option value="all">All</option>
<option value="product1">product1</option>
<option value="product2">product2</option>
</select>
<div class="filter-table-doc">[table id=Doc /]</div>
</div>

jquery:

var ajaxurl = "<?php echo admin_url('admin-ajax.php'); ?>";

jQuery(".filter-products").on( "change", function() {

    var productTypeNew = jQuery(".filter-products").attr("value");

    jQuery.ajax({
        url: ajaxurl,
        data: {
            'action':'get_table_doc_shortcode',
            'product' : productTypeNew
        },
        success:function(data) {
            jQuery(".filter-table-doc").html(data);

        },
        error: function(errorThrown){
            console.log(errorThrown);
        }
    });
});

php:

function get_table_doc_shortcode(){
    if ( isset($_REQUEST) ) {

        $product = $_REQUEST['product'];

        if ( $product == 'all' ) {
            $product = '[table id=Doc /]';
        }
        else {
            $product = '[table id=Doc filter="' + $product + '" /]';
        }

        return $product;
    }
   die();
} 
add_action('wp_ajax_get_table_doc_shortcode', 'get_table_doc_shortcode');
add_action('wp_ajax_nopriv_get_table_doc_shortcode', 'get_table_doc_shortcode');

这会在日志中生成一个错误; GET http://www.myurl.com/%3C?php%20echo%20admin_u…n-ajax.php%27);%20?%3E&action=get_table_doc_shortcode&product=product1 404 (Not Found).

现在我觉得完全卡住了,已经在这上面浪费了太多时间。有任何想法吗?

您的 Javascript 似乎是从 .js 文件而不是 .php 文件中调用的。这意味着您正在使用的 PHP 功能将无法使用。您看到的错误是因为 JS 正在读取 "<?php echo admin_url('admin-ajax.php'); ?>" 而不是您想要的 ajax url 的字符串值。如果您尝试访问 admin-ajax.php 的 url,请按照 docs:

Since Version 2.8, The JavaScript global variable ajaxurl can be used in case you want to separate your JavaScript code from php files into JavaScript only files. This is true on the administration side only.

因此,只需从您的代码中删除行 var ajaxurl = "<?php echo admin_url('admin-ajax.php'); ?>";,因为 ajaxurl 已在全局定义。