【问题标题】:Wordpress can't access globals and functions.php category edit pageWordpress 无法访问 globals 和 functions.php 类别编辑页面
【发布时间】:2015-04-28 16:18:33
【问题描述】:

我在functions.php中获得了我注册的侧边栏列表功能 在帖子选项页面上一切正常(wp-admin/post.php) 我可以通过我的函数获取所有注册的侧边栏。

但在类别编辑页面 (wp-admin/edit-tags.php) 中, 我什至无法访问全局变量 $wp_registered_sidebars ,更不用说函数本身了。

这里是函数

function sidebars_list(){

global $wp_registered_sidebars;
$sidebar = array();

if (!empty($wp_registered_sidebars)):
  foreach ($wp_registered_sidebars as $key => $access):
      $sidebar[$key] = $access['name'];
  endforeach;
endif;

var_dump($sidebar);

return $sidebar;
}

正如我所说,它非常适合在后端(前端)编辑帖子和页面

我试图 add_action 它,没有运气。 甚至无法访问类别编辑页面中的全局变量。

global $wp_registered_sidebars;
var_dump($wp_registered_sidebars);

返回空数组。 但是当我在函数内部进行 var_dump 时,它会按预期返回。 怎么了?

【问题讨论】:

  • 我不明白你为什么要这样做。在类别编辑页面上运行的钩子和过滤器太早了,它们甚至在边栏注册之前就运行了,这就是你得到一个空数组的原因
  • 你不明白什么?我需要这样做,然后告诉我获取侧边栏的方法?
  • 分类编辑页为什么需要侧边栏
  • 我将为每个类别的自定义侧边栏列出它们

标签: php wordpress


【解决方案1】:

在浪费了大量时间搜索这个并想出了这个解决方案之后。在加载侧边栏值之前通过类别页面进行访问。因此,您可以通过在该位置放置一个占位符 div 并在页面加载后使用 Ajax 和 jQuery 加载下拉列表或复选框中的值来解决问题。这对你有用。

将以下代码粘贴到您主题的functions.php中

// Call Actio to modify form on Add New Category
add_action( 'category_add_form_fields', 'edit_category_fields');

// Call Action to modify form on Edit Category
add_action( 'category_edit_form_fields', 'edit_category_fields');


function edit_category_fields($tag, $taxonomy)
{
    // Get the Current Value if any
    $leftsidebar_to_show = get_term_meta( $tag->term_id, 'leftsidebar_to_show', true);
    ?>
    <tr class="form-field">
        <th scope="row" valign="top"><label for="leftsidebar_to_show">Select Left Sidebar to Show</label></th>
        <td>
            <div id="leftsidebar_to_show_wrap">
                <select name="leftsidebar_to_show" id="leftsidebar_to_show">

                </select>
            </div>
            <!-- Store the current value as hidden input in order to Get Selected Option in jQuery -->
            <input type="hidden"  id="leftsidebar_to_show_val" value="<?php echo $leftsidebar_to_show; ?>" />

            <!-- Category ID as hidden Input -->
            <input type="hidden" name="term_id_val" value="<?php echo $tag->term_id; ?>" />
        </td>
    </tr>

    <?php
}

// Call Actio to Save Values on Add New Category
add_action( 'edited_category', 'save_category', 10, 2);

// Call Action to Save Values on Edit Category
add_action( 'create_category', 'save_category', 10, 2);

function save_category(){  
    update_term_meta( $_POST['term_id_val'], 'leftsidebar_to_show', $_POST['leftsidebar_to_show']);
}

// Function to enqueue Javascript file in admin
function my_enqueue($hook) {
    wp_enqueue_script( 'my_custom_script', get_template_directory_uri() . '/js/sidebars.js' );
}
add_action( 'admin_enqueue_scripts', 'my_enqueue' );

// Action Function to get Sidebars through Ajax Call
function prefix_ajax_get_sidebars() {
    $sidebarval = $_REQUEST['sidebarval'];
    $sidebarid = $_REQUEST['sidebarid'];
    $string = '<select id="'.$sidebarid.'" name="'.$sidebarid.'">';
    foreach ( $GLOBALS['wp_registered_sidebars'] as $sidebar ) {
        if($sidebarval == $sidebar['id']){
            $selected = ' selected';
        }else{
            $selected = '';
        }
        $string .= '<option value="'.$sidebar['id'].'"'.$selected.'>'.$sidebar['name'].'</option>';
    }
    $string .= '</select>';
    echo $string;
    die();
}
add_action( 'wp_ajax_get_sidebars', 'prefix_ajax_get_sidebars' );
add_action('wp_ajax_nopriv_get_sidebars', 'prefix_ajax_get_sidebars');

创建一个名为 sidebars.js 的文件并粘贴以下代码

(function ($) {
    "use strict";
    $(document).ready(function(){
        var leftsidebar_to_show_val = $('#leftsidebar_to_show_val').val();
        $.post(
            ajaxurl,
            {
                'action': 'get_sidebars',
                'sidebarval':   leftsidebar_to_show_val,
                'sidebarid' : 'leftsidebar_to_show'
            },
            function(response){
                $('#leftsidebar_to_show_wrap').html(response);
        });

    });


})(jQuery);

并将上面创建的文件移动到您主题的 js 文件夹中。现在您可以在添加和编辑类别表单中看到作为下拉列表列出的侧边栏。

希望这很清楚。

谢谢!

【讨论】:

    【解决方案2】:

    正如您所说,未找到 global 变量值。我假设您的变量被empty array 覆盖。

    我建议您更改变量名并使用 var_dump 重试该变量。

    global $wp_registered_sidebars_custom;
    var_dump($wp_registered_sidebars_custom);
    

    【讨论】:

      猜你喜欢
      • 2011-08-21
      • 1970-01-01
      • 2012-05-16
      • 1970-01-01
      • 2018-12-30
      • 1970-01-01
      • 1970-01-01
      • 2019-04-08
      • 2013-09-23
      相关资源
      最近更新 更多