wordpress 相关问题

此标记用于有关WordPress内容管理系统的特定于编程的问题。非主题问题包括主题开发,WordPress管理,管理最佳实践,服务器配置等。最好在Stack Exchange WordPress开发中提出这些问题。

删除或隐藏 WooCommerce 添加到购物车按钮

我想隐藏“添加到购物车”按钮并显示自定义文本而不是按钮。 我正在尝试以下钩子来删除按钮: 删除_操作('woocommerce_after_shop_loop_item','

回答 4 投票 0

删除 Woocommerce 中的“添加到购物车”按钮,但保留变体

美好的一天, 我需要隐藏 WooCommerce 中的添加到艺术按钮,而不影响定价或下拉菜单和变化。我正在使用 WPForms 添加到购物车并结帐,但只是不想...

回答 2 投票 0

如何使用自定义字段在 WooCommerce 单一产品页面上显示相关的自定义帖子类型?

有人请帮助我:) 所以,情况是这样的:我正在使用 WordPress,其中有一个我使用代码片段插件创建的查询。 使用的插件: 产品:WooCommerce 自定义字段...

回答 1 投票 0

将 WordPress 自定义帖子类型数据添加到外部数据库

此函数将自定义帖子“事件”数据添加到 Salesforce 数据库中。 我已经在 WordPress 之外测试了该功能,它运行完美。 当我通过添加新事件在 Wordpress 中测试它时,没有...

回答 1 投票 0

创建帖子时动态添加分类术语到自定义帖子类型

我使用自定义帖子类型 UI 插件创建了自定义帖子类型和分类法。前端有一个表单,填写后会在自定义帖子类型调查中创建一个新帖子。我想要

回答 2 投票 0

WordPress 从本地主机迁移到实时服务器后,图像未显示错误

我已将我的网站上传到我的服务器。 但是当我调用该网站时,它显示 url“localhost:8888”,并给出错误: 部分图片已损坏 某些部件无法正常工作。 网站链接...

回答 3 投票 0

如何获取WordPress帖子缩略图(特色图片)URL?

我正在使用此功能来获取特色图像: 现在我想在

回答 23 投票 0

带有两个不同应用程序链接的主页

我第一次尝试在 ReactJS 中构建应用程序(我是一名 Java 开发人员)。 我有两个 React 应用程序: Member-ui(根据角色执行活动) Admin-ui(管理

回答 1 投票 0

可以混淆 WordPress 中的插件目录吗?

是否可以重命名或重定向plugins/child[]目录以更改Google或源代码视图的插件名称? WordPress 显然依赖于 wp-content 并且它是子元素来运行,但我

回答 2 投票 0

禁用 WP REST API 的默认路由

我需要禁用 WP REST API 的默认路由并添加自定义路由。 我发现这个问题可以帮助我找到以下答案。 删除_操作('rest_api_init','create_initial_rest_routes',...

回答 5 投票 0

Docker 组合 php-fpm、nginx、MySQL 并在 nginx 上使用 wp-cli

我将 3 个独立的容器链接在一起: nginx:1.10-alpine PHP:7.0.6-fpm-高山 玛丽亚数据库:5.5 我的目标是在将源代码复制到 nginx 容器之前运行 wp-cli 安装。 是...

回答 1 投票 0

Nonce 检查失败

使用更新的代码进行编辑:仍然没有解决方案 有人能发现这段代码中的错误吗? 自定义页面.php: 使用更新的代码进行编辑:仍然没有解决方案 有人能发现这段代码中的错误吗? 自定义页面.php: <form name="customForm"> <?php wp_nonce_field('code_check', 'codecheck'); ?> Validation Code:<br> <input type="password" name="inputcode" id="inputcode" maxlength="6" inputmode="numeric"> <input type="text" name="message" id="message" style="display:none; background-color: #FFCCCC;"><br> <input type="button" name="submitbutton" value="Submit" onClick="customfunction()"> </form> 自定义.js: function customfunction() { const userInput = document.addStamp.inputcode.value; const token = document.addStamp.codecheck.value; fetch(`http://...../wp-json/api/v1/custom?code=${userInput}&token=${token}`).then(r => r.json()).then(data => { ...... API文件.php: public function custom($request) { $params = $request->get_params(); $retrieved_nonce = $params[token]; if($retrieved_nonce) { if (!wp_verify_nonce($retrieved_nonce, 'code_check' ) ) die( 'Failed security check' ); } .... 一切正常,直到我将 nonce 验证代码添加到 api 请求中。 现在,当我单击“提交”按钮时,它不提交,我进入控制台: Uncaught (in promise) SyntaxError: Unexpected token F in JSON at position 0 所以它失败了,因为“F”是失败消息的点 0。 但是,如果我输出“$retrieved_nonce”,我实际上会得到页面源代码中所示的随机数值,所以看起来它正在到达端点? 我尝试注销并重新登录,但没有任何变化。 我这个代码设置错了吗? 你可以尝试一下。 表格。 <form name="customForm" method="post"> <?php wp_nonce_field('code_check', 'code_check'); ?> Validation Code:<br> <input type="password" name="inputcode" id="inputcode" maxlength="6" inputmode="numeric"> <input type="text" name="message" id="message" style="display:none; background-color: #FFCCCC;"><br> <input type="button" name="submitbutton" value="Submit" onClick="customfunction()"> </form> 在 customfunction 函数中还发送 wp_nonce_field 字段值。 function customfunction() { const userInput = document.customForm.inputcode.value; const code_check = document.customForm.code_check.value; fetch('http://...../wp-json/api/v1/custom?code='+userInput+'&code_check'+code_check).then(r => r.json()).then(data => { 现在验证 wp_nonce_field 字段值 public function custom($request) { $retrieved_nonce = $request['code_check']; if (!wp_verify_nonce($retrieved_nonce, 'code_check' ) ) die( 'Failed security check' ); /*** you can also try if ( isset( $request['code_check'] ) || wp_verify_nonce( $request['code_check'], 'code_check' ) ) *******/ } 我遇到了同样的问题,在调试时,我发现随机数与当前登录的用户绑定在一起(这显然对安全性很有好处)。 但是,当我创建随机数时,它无法正确识别我已登录。就我而言,我在其上创建随机数的表单页面是一个自定义端点,使用 add_rewrite_endpoint 并路由到我的自定义通过 template_include 钩子模板。我不知道为什么 WordPress 在查看前端时没有检测到我已登录,因为用户身份验证挂钩在模板挂钩之前运行,但这是另一天的问题。 当 JS 使用该值将该请求发送到后端时,就会出现差异。在后端,它确实知道我已登录,然后使用这些值重新创建随机数哈希。哈希比较失败,因为发送的哈希使用的值与我的用户帐户中的值不同。 我实现的解决方案类似于摘要身份验证,用于创建不与用户帐户绑定的模拟随机数值。所以我创建了这个 PHP 类: class CustomNonce { private static $endpoint = 'authorization-uri-endpoint'; // E.g., `auth` from `https://example.com/auth/` private static $username = 'SomeArbitr@ryT3xt'; private static $password = 'Some0therArb1traryText'; /** * Required Parts of Digest * * Feel free to modify the array order to further randomize it from other sites * * @var array An array of the 9 required parts of digest authentication. */ private static $digest_parts = array('username', 'realm', 'nonce', 'cnonce', 'nc', 'qop', 'opaque', 'uri', 'response'); /** * Digest Delimiter * * Feel free to modify this character to further randomize it from other sites * * @var string A string used as a delimiter for digest authentication. */ private static $digest_delimiter = '=^_^='; /** * Creates nonce. * * @param string|int $action Scalar value to add context to the nonce. * * @return string The token. */ public static function create($action = -1) { $_key = trim(sanitize_key('_nonce_' . self::$endpoint . '_' . $action . '_')); $nc_key = $_key . 'nc'; $nc = get_transient($nc_key); // Get the current count for this particular request if (!is_int($nc)) { $nc = 1; // Start it at one if it was never called before } else { $nc++; // Increment it } set_transient($nc_key, $nc); // Save it without an expiration to make it persistant cache $digest = array(); foreach (self::$digest_parts as $key) { switch ($key) { case 'username': // username, same as server response $digest[$key] = self::$username; break; case 'realm': // realm, same as server response $digest[$key] = self::$endpoint; break; case 'nonce': // nonce, generated by remote server to return back as is, the "signature" if you will $digest[$key] = $action; break; case 'cnonce': // cnonce, random unique ID generated by client $digest[$key] = md5(uniqid($nc_key . $action, true)); set_transient($_key . $nc, $digest[$key], HOUR_IN_SECONDS); // Save it for just 1 hour break; case 'nc': // nonce count, hexadecimal serial number for the request, the client should increase this number by one for every request $digest[$key] = sprintf('%06d', $nc); // Convert it to a 6-digit number (hexadecimal), probably with preceeding zeroes break; case 'qop': // qop, values are "auth" or "auth-int" $digest[$key] = 'auth-int'; break; case 'opaque': // opaque, same as server response $digest[$key] = self::$password; break; case 'uri': // encoded authentication uri, where authentication should take place $digest[$key] = htmlentities(urlencode(home_url(self::$endpoint)), ENT_QUOTES, 'UTF-8', false); break; default: $digest[$key] = ''; break; } } /** * Validation hash. * * The server will also make one and compare it to this. */ $digest['response'] = self::generate_hash($digest['realm'], $digest['uri'], $digest['nonce'], $digest['cnonce'], $digest['username'], $digest['opaque'], $digest['nc'], $digest['qop']); /** * Since we aren't sending it as an Authorization header, we don't need to configure it like this: * `Digest username="%s",realm="%s",nonce="%s",cnonce="%s",nc="%s",qop="%s",opaque="%s",uri="%s",response="%s"` */ return implode(self::$digest_delimiter, array_values($digest)); } public static function verify($nonce, $action = -1) { $nonce = trim(strval($nonce)); $action = trim(sanitize_text_field($action)); $request_method = strtoupper(sanitize_key(array_has_key('REQUEST_METHOD', $_SERVER))); if (empty($nonce) || empty($action) || $request_method !== 'POST') { error_log('Error. Nonce was empty, action was empty, or invalid request method.' . print_r(array( 'nonce' => $nonce, 'action' => $action, 'method' => $request_method ), true)); return false; } /** * Parse the digest value * * Protect against missing data */ $digest = explode(self::$digest_delimiter, $nonce); if (count($digest) !== count(self::$digest_parts)) { error_log('Error. Could not parse digest. ' . print_r(array( 'nonce' => $nonce, 'digest' => $digest, ), true)); return false; } $digest = array_combine(self::$digest_parts, $digest); /** * Validate Requirements * * Ensure all parts exist and are valid. */ $nc = 0; $cnonce = ''; foreach ($digest as $key => $value) { $value = trim(sanitize_text_field($value)); if (empty($value)) { error_log('Error. One or more required parts of the digest are missing.' . PHP_EOL . print_r(array( 'key' => $key, 'value' => $value, 'digest' => $digest, 'nonce' => $nonce ), true)); return false; } if ($key == 'nc') { /** * Compare nonce counts and ensure it was issued at all. */ $digest[$key] = intval($value); if (!$digest[$key]) { error_log('Error. Missing nc.' . PHP_EOL . print_r(array( 'key' => $key, 'value' => $value, 'digest' => $digest, 'nonce' => $nonce ), true)); return false; } // $_key = trim(sanitize_key('_nonce_' . self::$endpoint . '_' . $action . '_')); // $nc_key = $_key . 'nc'; // E.g., "_nonce_magic-mirror_hourly-update_nc" $_key = trim(sanitize_key('_nonce_' . self::$endpoint . '_' . $action . '_')); $_dkey = trim(sanitize_key('_nonce_' . $digest['realm'] . '_' . $digest['nonce'] . '_')); if ($_key !== $_dkey) { error_log('Error. Mismatching nonce keys.' . PHP_EOL . print_r(array( 'key' => $key, 'value' => $value, 'key1' => $_key, 'key2' => $_dkey, 'digest' => $digest, 'nonce' => $nonce ), true)); return false; } $nc = intval(sanitize_text_field(get_transient($_key . 'nc'))); if ($nc < $digest[$key]) { error_log('Error. Mismatching nc.' . PHP_EOL . print_r(array( 'key' => $key, 'value' => $value, 'nc' => $nc, '_key' => $_key, 'digest' => $digest, 'nonce' => $nonce ), true)); return false; } $cnonce = trim(sanitize_text_field(get_transient($_key . $nc))); if (!$cnonce || $cnonce !== $digest['cnonce']) { error_log('Error. Invalid or expired cnonce.' . PHP_EOL . print_r(array( 'key' => $key, 'value' => $value, '_key' => $_key . $nc, 'cnonce' => $cnonce, 'nc' => $nc, 'digest' => $digest, 'nonce' => $nonce ), true)); return false; } } elseif ($key == 'uri' && $value === 'http://') { error_log('Error. Invalid URI.' . PHP_EOL . print_r(array( 'key' => $key, 'value' => $value, 'digest' => $digest, 'nonce' => $nonce ), true)); return false; } elseif ($key == 'qop' && $value != 'auth-int') { error_log('Error. Invalid authorization method' . PHP_EOL . print_r(array( 'key' => $key, 'value' => $value, 'digest' => $digest, 'nonce' => $nonce ), true)); return false; } $digest[$key] = $value; } /* * Verify Digest * * Make our own hash and compare it with the one sent to us. */ $hash = self::generate_hash( self::$endpoint, // Realm htmlentities(urlencode(home_url(self::$endpoint)), ENT_QUOTES, 'UTF-8', false), // URI $digest['nonce'], // Nonce from client $cnonce, // My nonce self::$username, // My username self::$password, // My password $digest['nc'], // The hexidecimal value provided to me $digest['qop'] // The auth method provided to me ); if ($hash !== $digest['response']) { error_log('Failed digest authentication.' . PHP_EOL . print_r(array( 'hash' => $hash, 'response' => $digest['response'], 'digest' => $digest ), true)); return false; } // Valid nonce. return true; } /** * Get Valid Digest Response * * @param string $realm The realm, provided by this application. * @param string $uri The URL where authentication takes place, provided by the remote request. * @param string $nonce Randomly generated string provided by the remote request. * @param string $cnonce Randomly generated string provided by this application. * @param string $username The username that matches the one in the application, provided by the remote request. * @param string $password The password that matches the one in the application, provided by the remote request. * @param string $nc Nonce count, hexadecimal serial number for the request, the application should increase this number by one for every request. * @param string $qop Values are `auth` or `auth-int`. * @param string $method Request method. * * @param string */ private static function generate_hash($realm, $uri, $nonce, $cnonce, $username, $password, $nc, $qop = 'auth-int', $method = 'POST') { // Exit early if missing required fields if (!$realm || !$uri || $uri == 'http://' || !$nonce || !$cnonce || !$username || !$nc || !$qop || !$method) { return ''; } $before = md5($username . ':' . $realm . ':' . $password); $after = md5($method . ':' . $uri); return md5($before . ':' . $nonce . ':' . $nc . ':' . $cnonce . ':' . $qop . ':' . $after); } 使用时请更换 <?php wp_nonce_field('code_check', 'codecheck'); ?> 与 <input type="hidden" name="_wpnonce" value="<?php echo esc_attr(CustomNonce::create('code_check')); ?>"> 并更换 wp_verify_nonce($retrieved_nonce, 'code_check' ) 与 CustomNonce::verify($retrieved_nonce, 'code_check') 如果您不想记录失败,也可以删除所有 error_log() 行。我将它们保留在我的开发环境中进行测试,但随后将它们删除以用于生产。

回答 2 投票 0

如何在 Wordpress 中创建社交证明插件

我想为我的 WordPress 应用程序创建一个社交证明插件,以便当用户登录时,其他在线用户将看到一个弹出通知,显示登录的用户和...

回答 1 投票 0

Wordpress WP_Query 带分页

我一直在谷歌上搜索并查看与此相关的许多其他问题,但问题仍然存在。 我正在尝试获取分页查询,但仅显示第 1 页。如果您更改分页

回答 1 投票 0

如何在 WordPress 中禁用我的成员的整页脚本?

如何仅对我在 WordPress 中的注册会员禁用我的整页脚本?这是我的整页脚本代码 如何仅对我在 WordPress 中的注册会员禁用我的整页脚本?这是我的整页脚本代码 <script src="https://linkvertise.net/cdn/linkvertise.js"></script><script>linkvertise(11261, {whitelist: ["dropmb.com"], blacklist: []});</script> <script src="https://linkvertise.net/cdn/linkvertise.js"></script><script>linkvertise(15361, {whitelist: ["verystream.com"], blacklist: []});</script> 使用函数is_user_logged_in() linkvertise(1265898, {白名单: [], 黑名单: [""]});

回答 2 投票 0

wordpress 中的 the_permalink 方法未按预期工作?

这是我的section-archive.php 文件。当我点击按钮时,它不显示任何内容。 这是我的section-archive.php 文件。当我点击按钮时,它不显示任何内容。 <?php if(have_posts()):while(have_posts()): the_post(); ?> <div id="archive-section" class="card mb-3"> <div class="card-dody"> <h3><?php the_title() ?></h3> <?php the_excerpt(); ?> <a class="btn btn-success" href="<?php the_permalink(); ?>">ادامه مطلب</a> </div> </div> <?php endwhile; endif;?> 我希望通过单击“继续阅读”按钮将文章的其余部分显示在新页面上。 get_permalink,需要一个id作为参数,get_the_permalink使用当前的帖子id。 https://developer.wordpress.org/reference/functions/get_permalink/ https://developer.wordpress.org/reference/functions/get_the_permalink/

回答 1 投票 0

如何手动更改 WordPress 帖子上自定义分类的出现顺序?

我为每篇文章的作者都有一个自定义分类法,它基本上是一个出版物和资源库。我已经使用“get_the_terms”来显示它们并且它工作得很好!不过我可以...

回答 1 投票 0

PHP 代码无法在 PHTML 文件中运行

我正在尝试将 Wordpress 菜单集成到 Boxbillng 主题中,但问题是我使用的 PHP 代码根本没有被解析。 下面是获取 WordPress 菜单的代码: 我正在尝试将 Wordpress 菜单集成到 Boxbillng 主题中,但问题是我使用的 PHP 代码根本没有被解析。 这是获取Wordpress菜单的代码: <?php include( '../wp-load.php' ); wp_nav_menu( array ( 'menu' => 'Main Menu' ) ); ?> 然后这是 BoxBilling 主题的代码: <div class="main-navigation"> <?php echo file_get_contents("http://www.glowstonehosting.net/nav.php"); ?> </div> 但是在 Google Chrome Inspect Element 中它显示了以下内容: <!--?php echo file_get_contents("http://www.glowstonehosting.net/nav.php"); ?--> 所以它们都被注释掉了,我也尝试了与此类似的另一个问题的答案之一:.phtml 文件中的 php 无法解析 唯一的答案建议将其添加到 Wordpress .htaccess: AddType application/x-httpd-php .php .phtml 哪个仍然不起作用,所以有人有任何想法吗? 我相信最简单的方法是创建 Twig 扩展并稍后在 .phtml 文件中使用它。 创建一个函数: public function get_contents($url) { return file_get_contents($url); } 将其包含在树枝过滤器列表中: public function getFilters() { return array( new \Twig_SimpleFilter('get_contents', array($this, 'get_contents')), ); } 并在 Twig 模板中的任何位置使用它: {{ 'http://www.glowstonehosting.net/nav.php'|get_contents }} 如何编写自定义 Twig 扩展 为高级用户创建扩展 file_get_Contents 将文件作为字符串加载,PHP 不被解释。你想要的是 include 或 require 它将解释 PHP。 <div class="main-navigation"> <?php include("some/filesystem/path/nav.php"); ?> </div> 请注意您想要使用文件系统上文件的路径的变化,大概您正在调用 include 的同一台服务器上加载文件。如果是这种情况,您不需要添加处理程序,除非您计划直接通过 Web 服务器访问 PHP 文件,如 http://somedomain.com/somefile.phtml

回答 2 投票 0

根据 Woocommerce 中的产品标签自动将产品分配到类别

我目前有一个函数可以使用 wp_insert_post() 成功将产品添加到 Woocommerce。 我现在尝试根据产品标签将产品分配到相关类别。例如...

回答 2 投票 0

类内调用函数

我正在尝试编写一个脚本,从 WordPress 插件中调用类 CFF_Feed_Saver_Manager 中的函数clear_single_feed_cache(),但无法使其工作。我不确定这是否是因为...

回答 1 投票 0

© www.soinside.com 2019 - 2024. All rights reserved.