Мне интересно, есть ли способ поместить мою ссылку вложения WordPress внутри функции javascript. Проще говоря, это будет работать так:
$attach_url = "<?php echo wp_get_attachment_url(); ?>";
function () {
return $attach_url;
}
В частности, я ищу способ реализовать его с помощью кнопок общего доступа Photoswipe (полный исходный код). Вот):
$attach_url = = "<?php echo wp_get_attachment_url(); ?>";
(this, function () {
'use strict';
var PhotoSwipeUI_Default =
function(pswp, framework) {
shareButtons: [
{url:'https://www.facebook.com/sharer/sharer.php?u={{attachment_pg_url}}'},
],
getAttachmentPageURL: function ( shareButtonData ) {
return $attach_url;},
parseShareButtonOut: function(shareButtonData, shareButtonOut) {
return shareButtonOut;
},
_updateShareURLs = function() {
var shareButtonOut = '',
shareButtonData,
shareURL,
attachment_pg_url;
for(var i = 0; i < _options.shareButtons.length; i++) {
shareButtonData = _options.shareButtons[i];
attachment_pg_url = _options.getAttachmentPageURL(shareButtonData);
shareURL = shareButtonData.url.replace('{{attachment_pg_url}}', attachment_pg_url );
Любая помощь высоко ценится!
РЕДАКТИРОВАТЬ
Вот мой обновленный код, который почти работает. Файл js интерпретирует скрипт постановки в очередь из functions.php. Тем не менее, отображаемый URL <?php echo get_attachment_link(); ?>
, а не фактическая ссылка (например: home.com/attachment-page), которая отображается правильно, когда я использую этот код php в цикле.
Как я могу получить URL для вывода ссылки, а не фактический код PHP?
В functions.php:
// Custom Photoswipe Share URL
wp_enqueue_script( 'photoswipe_custom_share_link', get_template_directory_uri() . '/custom_path_here/photoswipe-ui-single-item.js' );
$attach_url = "<?php echo get_attachment_link(); ?>";
wp_localize_script( 'photoswipe_custom_share_link', 'pswp_custom_share', $attach_url );
В js-файле Photoswipe (с некоторыми дополнительными исправлениями из моего исходного поста):
(this, function () {
'use strict';
var PhotoSwipeUI_Default =
function(pswp, framework) {
shareButtons: [
{url:'https://www.facebook.com/sharer/sharer.php?u={{attach_url}}'},
],
getAttachmentURLForShare: function ( /*shareButtonData */) {
return pswp_custom_share;
},
parseShareButtonOut: function(shareButtonData, shareButtonOut) {
return shareButtonOut;
},
_updateShareURLs = function() {
var shareButtonOut = '',
shareButtonData,
shareURL,
attachment_url;
for(var i = 0; i < _options.shareButtons.length; i++) {
shareButtonData = _options.shareButtons[i];
attachment_url = _options.getAttachmentURLForShare(shareButtonData);
shareURL = shareButtonData.url.replace('{{attach_url}}', encodeURIComponent(attachment_url) );
РЕДАКТИРОВАТЬ
Я сделал ошибку, используя кавычки в моем сценарии постановки в очередь. С помощью приведенного ниже кода форматирование теперь корректно. Единственная проблема заключается в том, что вывод URL — «home.com» вместо «home.com/attachment-page».
Как я могу определить динамически сгенерированный URL страницы вложения вне цикла? Мне нужно повторить это?
$attach_url = get_attachment_link($attachment->ID);
РЕДАКТИРОВАТЬ — РЕШЕНО!
Мне нужно было использовать JavaScript, чтобы получить базовый URL-адрес вложения в цикле. (На основании ответа Вот и с помощью Darkcoder).
В functions.php:
// Custom Photoswipe Share URL
function pswp_custom_share()
{
/* Get the ID of the current post */
global $post;
$ID = $post->ID;
/* register the script */
wp_register_script( 'photoswipe_custom_share_link', get_template_directory_uri() . 'custom_path_here/photoswipe-ui-single-item.js', array('jquery'), false, true );
$attach_url = array(
'attachment_page' => get_attachment_link( $ID )
);
wp_enqueue_script( 'photoswipe_custom_share_link' );
wp_localize_script('photoswipe_custom_share_link', 'attach_url', $attach_url);
}
/* If we're not in the admin section call our function on the wp_enqueue_scripts hook */
if ( !is_admin() ) add_action( "wp_enqueue_scripts", "pswp_custom_share", 10 );
В файле Photoswipe js:
getAttachmentURLForShare: function ( /*shareButtonData */) {
return attach_url.attachment_page;
},
Вы можете использовать скрипт сценария WordPress для достижения этой цели
Пожалуйста, перейдите по ссылке ниже для подробной информации
Дайте мне знать, если это решит вашу проблему
Теоретически это должно быть возможно, поскольку PHP обрабатывается на стороне сервера, прежде чем JavaScript запускается на стороне клиента.
Я заметил, что в вашем скрипте отсутствует идентификатор вложения из функции wp_get_attachment_url.
Из документации WordPress API:
<?php echo wp_get_attachment_url( 12 ); ?>
Первым шагом было бы проверить функциональность на базовом уровне, повторив URL-адрес вложения на странице. Сделав это, вы знаете, что правильно подключаетесь к функции.
Затем присвойте это значение переменной JavaScript и попробуйте запустить какой-либо журнал предупреждений или консоли, чтобы проверить, что вы можете успешно проанализировать URL-адрес глобальной переменной JS.
Затем посмотрите, можете ли вы получить доступ к этой переменной внутри функции. Если вы можете выполнить каждый из перечисленных выше основных этапов, то для вас будет более чем возможно проанализировать эти данные в плагине Photoswipe.
Дайте мне знать, если вы застряли, я постараюсь помочь, чем смогу.